是否有过去线程的日志,但现在已关闭?

是否有过去线程的日志,但现在已关闭?

有时,我有一个流氓 Java 进程,它占用了我 100% 的 CPU 并使其温度升高约 30C(如果不杀死,通常会导致崩溃)。

问题是,我永远无法真正识别它(它有一长串参数和东西)或分析它,因为我必须如此快地杀死它。

我可以查看某种日志来查看我过去杀死的进程的身份吗?如果没有,有没有办法让我在下次出现时捕获该过程?

如果重要的话我是 OpenSuse 11.4。

答案1

不,默认情况下不会。存在过多的日志记录(尤其是当您开始冒险记录写入日志条目的操作时......)。

BSD 进程会计(如果有,请运行lastcomm),如果处于活动状态,则记录所执行的每个命令的名称和一些基本统计信息,但不记录参数。

审计子系统更通用,更灵活。安装audit软件包并阅读SuSE审核指南(主要是关于规则),或者尝试

auditctl -A exit,always -F path=/usr/bin/java -S execve

或者:与其杀死它,不如kill -STOP杀死它。这停止暂停进程,不问任何问题。您可以选择稍后恢复 ( kill -CONT) 或终止 ( kill -KILL)。只要进程仍然存在,您就可以检查其命令行 ( /proc/12345/cmdline)、内存映射 ( /proc/12345/maps) 等。

或者:将调试器附加到进程并暂停它。它就像这样简单gdb --pid 12345(Java 进程可能有更好的选择);连接调试器会立即暂停进程(如果退出调试器,进程会收到 SIGCONT 并恢复)。

请注意,所有这些仅捕获操作系统级别的进程,而不是 JVM 线程。您需要求助于 JVM 功能来调试线程。

答案2

它不仅可以用于记录日志,还可以用于监视和管理进程。这是监控- 非常灵活和有用的实用程序。它可以通过自动重启进程来防止某些进程在一段时间内(根据您的需要)占用 100%(或您配置的任何资源)CPU(或其他资源)。它会将此类异常情况记录到日志文件或系统日志中。

你可以找到很多配置示例这里

相关内容