首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java堆空间和消息丢失

java堆空间和消息丢失
EN

Stack Overflow用户
提问于 2009-11-04 15:53:24
回答 3查看 221关注 0票数 0

我正在许多计算机上运行一个java程序,这些计算机在它们之间进行交互。经过几个小时(2-5小时)计算机开始失败(线程开始陷入死锁,消息开始丢失-如果你考虑到在第一个小时左右的事情运行得很好)。

我怀疑这是因为我内存太多了。我在linux上运行,这是top的相关输出

代码语言:javascript
运行
复制
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30376 username  18   0  976m 132m 6804 S    0  4.0   0:05.60 java

  1. ,这看上去很高吗?
  2. ,还有为什么会发生这些错误的其他想法,都会受到欢迎。--
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-04 16:08:29

另一件可能发生的事情是,你失去了联系。就在昨天,我的一个同事也遇到了这种情况。

ulimit -n将告诉您可以打开多少个文件句柄;netstat -at将告诉您打开了多少个套接字。当第二个数字接近第一个数字时,打开连接的尝试将开始失败。

在这种特殊情况下,当连接在使用后仍在OPEN_WAIT中时,强制垃圾收集( Runtime.gc() )会有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2009-11-04 16:05:50

您可以通过查看JVM堆大小的状态并定期记录它,了解内存使用的趋势。从这些日志中,您可以绘制一个图表,并查看是否存在异常。(顺便说一句,拼图模式是正常的垃圾收集行为。)

代码语言:javascript
运行
复制
    // Memory status
    Runtime     runtime =   Runtime.getRuntime();
    final long  totalMem =  runtime.totalMemory();
    final long  freeMem =   runtime.freeMemory();
    if (log.isDebugEnabled()) {
        log.debug("Memory free=" + freeMem + 
                " used=" + (totalMem - freeMem) + 
                " total=" + totalMem);
    }
票数 3
EN

Stack Overflow用户

发布于 2009-11-04 16:27:42

可能的问题:

(

  1. Resources(sockets,数据库等)未正确关闭
  2. 内存泄漏(在集合中保存引用,很少(在数小时后会出现)的非封闭

并发错误),在您有机会读取它或获得大于缓冲区的消息之前,从套接字上的缓冲区中丢失

  1. 消息,或者得到大于缓冲区的消息,通常是通过在数据一出现时就让线程读取套接字来纠正的,并将其放到工作队列中--主处理线程可以处理

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1674716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档