我在Ubuntu服务器上运行了一个jar背景。
在某个时刻,应用程序开始消耗太多CPU(400%)和4个子进程停留在R状态:
HTOP state before/after problem
N.B:问题是因为使用量而产生NOT,它是在一定时间(3-4天)之后引起的。我们必须杀死java并重新运行它。
编辑添加GC日志:
我做了java -verbose:gc,这是重新启动应用程序和应用程序显示之前解释的问题之间的内容。
编辑添加旧日志:
在第一张图中,x轴不在秒中,因为日志没有在GC完成时给出时间戳。同样在底部的ScreenShot中,Visual GC在发生问题的时间段内在Visual VM中运行。
这是日志转储:
答案 0 :(得分:2)
一个可能的原因(这是纯粹的推测,因为我们没有任何信息可以继续)是java进程内存不足并开始执行背对背的完全垃圾收集,这是cpu密集型的。 启用日志记录以确定是否收到OutOfMemory错误,如果执行此操作,请启用gc logging并尝试确定内存泄漏的来源。
在查看图表之后,我会说如果x轴大于秒,你肯定会有资源泄漏。如果您能够在最后阶段以更高的分辨率发布终身代的行为,那将会很有趣。
好的,看看新图表我有点惊讶。我无法将第一个图表的行为与新图表协调一致。您似乎根本没有任何内存问题。老年人基本上是空缺的年轻人。你有申请日志吗?
新图表不会提供任何更有意义的信息,您可能会考虑在应用程序出现故障时进行线程转储。使用jstack <pid> >> thread_dump.log