我遇到了一个严重的生产问题。在 OpenJDK 上运行 Java 应用程序的服务似乎在随机时间停止。
手动调用时它可以正确启动:
sudo /etc/init.d/name start
但过了一段时间后,该进程突然消失了。上次出现这种情况是在启动后约 3 小时。
控制台输出被重定向到日志文件。那里没有解释。应用程序日志也是如此(通过 Java 日志框架)。
服务日志中没有有趣的内容:
journalctl -u name.service
整个系统上找不到 Java 崩溃报告文件
sudo find / -name 'hs_err*'
我还能在哪里找到解释?这很紧急——任何帮助都将不胜感激!
答案1
应用程序消失而没有进一步的日志的最可能原因是系统内存不足。
您可以使用以下方式确认
$ grep -i -A20 "Out of memory" /var/log/syslog
在普通服务器上,这种情况通常由于以下原因之一而发生:
- 您的应用程序出现内存泄漏并且不断使用越来越多的内存。
- 您的应用程序在正常运行期间使用了过多的内存,但是只有当您的虚拟化框架将配置的内存限制在较低的保证范围内时,您才会注意到这一点。
- 其他应用程序占用过多的内存。这可能是应用程序使用的 SQL 服务器配置错误。请记住:oom killer 不一定会杀死应用程序造成内存不足的情况(或者在某种程度上导致这种情况的情况)。
答案2
答对了!11 月 7 日 02:00:51 web1 内核:[2993761.744187] 内存不足:终止进程 23861 (java) 得分 461 或牺牲子进程。如何控制?
要控制它,您需要找出导致系统内存不足的原因并解决该问题。您需要安装监控程序然后使用它。观察系统正在做什么,识别使用内存的进程,然后找出它们在做什么以及原因。