Java进程保持运行状态并消耗CPU

Java进程保持运行状态并消耗CPU,java,netty,cpu,ubuntu-server,Java,Netty,Cpu,Ubuntu Server,我有一个jar在Ubuntu服务器的后台运行 在某一时刻,应用程序开始消耗太多CPU(400%),4个子进程处于R状态: 注意:问题不是因为使用量太大,而是在一段时间后(3-4天)引起的。我们必须杀死java并重新运行它 编辑添加GC日志: 我做了java-verbose:gc,下面是我在重启应用程序和应用程序显示之前解释的问题之间得到的结果 编辑添加旧发电机日志: 在第一个图形中,x轴不在第二个图形中,因为GC完成时日志没有给出时间戳。同样在底部的屏幕截图中,VisualGC在问题发生期间在

我有一个jar在Ubuntu服务器的后台运行

在某一时刻,应用程序开始消耗太多CPU(400%),4个子进程处于R状态:

注意:问题不是因为使用量太大,而是在一段时间后(3-4天)引起的。我们必须杀死java并重新运行它

编辑添加GC日志:

我做了java-verbose:gc,下面是我在重启应用程序和应用程序显示之前解释的问题之间得到的结果

编辑添加旧发电机日志:

在第一个图形中,x轴不在第二个图形中,因为GC完成时日志没有给出时间戳。同样在底部的屏幕截图中,VisualGC在问题发生期间在VisualVM中运行

以下是日志转储:

一个可能的原因(这纯粹是猜测,因为我们没有任何信息可以继续)是java进程内存不足,开始进行背对背的完全垃圾收集,这是cpu密集型的。 启用日志记录以确定是否出现OutOfMemory错误,如果出现,请启用gc日志记录并尝试确定内存泄漏的来源

在看了你的图表之后,我想说,如果x轴大于秒,你肯定有资源泄漏。如果你能在最后阶段以更高的分辨率发布终身教育一代的行为,那将很有趣

好的,看看新的图表,我有点惊讶。我无法协调第一个图和新图的行为。你似乎根本没有任何记忆问题。老一代基本上是空的,年轻一代也是空的。你有你申请的日志吗


新的图表没有给出任何有意义的信息,当应用程序乱七八糟时,你可能会考虑做一个线程转储。使用

jstack>>thread\u dump.log

您所说的是哪种日志?您通常有一个应用程序日志?你没有server.log之类的东西吗?你没有在std.err上得到任何信息?我做我的应用程序日志并将“system.out.println”重定向到另一个日志文件。但是没有错误或例外。请向我们提供更多信息,你有一些日志吗?@Hector我不知道我可以向我的应用程序添加哪些日志,这些日志可能会很有用!