OOM 分数调整

OOM 分数调整

在 Ubuntu 12.04/Java 1.7 上

我一直在阅读/搜索有关 OOM 终止程序的信息,并且大致了解“proc”手册页的内容,尤其是 oom_adj 部分。这一切都是因为我的重要“MQ 侦听器”被终止了。

我们有一个主侦听器进程,它侦听 MQ 消息并使用相同的 jar 文件、不同的命令行参数生成新作业。它使用 Runtime.getRuntime().exec 来触发作业。

整个过程以权限非常低的用户身份运行,该用户没有任何其他权限。

我担心的是,监听器进程的 OOM 分数会不断增加,因为它会不断生成进程并最终被终止,假设 java exec 调用在内部使用 fork。

  1. 如何更改低权限用户启动的进程的 oom_adj 值?否则,这意味着所有可以部署 jar 文件的人都需要具有 sudo 权限。

  2. 是否有任何调用/文件可用于获取所有作业的 OOM 分数,以找出哪些作业可能被终止?寻找类似于系统日志文件中记录的报告,但实际上没有终止作业

答案1

oom_score_ajk来修复这个问题不是一个好办法。即使你调整了 OOM 分数,某物将被杀死,最终它会成为您不希望死掉的东西(无论是 MQ 侦听器还是 syslog/cron 之类的核心系统服务)。

解决您的问题的可靠方法是获取更多内存(RAM + 交换)或减少应用程序的内存使用量。

相关内容