java - 野蝇会杀死另一只野蝇吗?

标签 java linux jakarta-ee wildfly-8

我们遇到了一个(至少在我们看来)奇怪的问题:

我们在同一台 linux 机器 (CentOS 6.6) 上安装了两个 Wildfly 8.1,它们运行不同版本的相同应用程序并列出不同的端口。

现在,我们突然发现,当启动其中一个时,另一个被杀死了。然后我们发现由于其他泄漏进程,可用内存量很低。当我们杀死它们时,两只野蝇再次正常运行。

因为我不认为 linux 本身决定杀死另一个随机进程,我假设 JBoss 有某种机制通过杀死它认为不再需要的东西来释放内存,或者有(可能是错误的)配置)它们都使用的资源导致其中一个在无法获取资源时被杀死。

有没有人经历过类似的事情或知道那种机制?

最佳答案

很可能是 linux OOM Killer . 您可以通过检查日志文件来验证其中一台服务器是否被它杀死:

grep -i kill/var/log/messages*

如果是这样,您应该会看到如下内容:

主机内核:内存不足:终止进程 2592

OOM killer 在确定要杀死哪个进程时使用以下算法:

The function select_bad_process() is responsible for choosing a process to kill. It decides by stepping through each running task and calculating how suitable it is for killing with the function badness(). The badness is calculated as follows, note that the square roots are integer approximations calculated with int_sqrt();

badness_for_task = total_vm_for_task / (sqrt(cpu_time_in_seconds) *
sqrt(sqrt(cpu_time_in_minutes)))

This has been chosen to select a process that is using a large amount of memory but is not that long lived. Processes which have been running a long time are unlikely to be the cause of memory shortage so this calculation is likely to select a process that uses a lot of memory but has not been running long.

可以通过读取/proc中进程目录下的oom_score文件,手动查看每个进程的badness

cat/proc/10292/oom_score

关于java - 野蝇会杀死另一只野蝇吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27844528/

相关文章:

java - 算法:从多个有序列表中搜索递增的整数序列

java - UJMP 输出未正确显示

java - rxjava中的后台任务队列

c - 在客户端代码连接之前绑定(bind)

java - 如何通过上下文对象获取资源元素

java - Java 中时间派生属性的最佳实践

java - 为什么Java类文件 "typically (but not necessarily)"存储在一个文件中?

linux - xterm 中 vim 的功能键

c - 为什么进程要处理阻塞的信号?

hibernate - 添加 javaee-web-api 依赖后出现 ClassFormatError 异常