OOM杀手,JBoss和核心恐慌

我们在带有6GB RAM的VMWareEx3.5(x64)上运行RedHat 3.4.6(x32)。 一些java进程(包括jboss)正在后台运行。

问题是java进程消耗大量的内存,有时他们被OOM杀手杀死。 当OOM杀手即将起作用时,空闲物理内存非常低,为100MB-200MB,但不使用交换(99%免费)。 有时这也会导致内核恐慌。

  • 那么为什么不使用交换?
  • 如何调查这个内核恐慌?
  • 32位Redhat上使用6GB内存?

谢谢

就个人而言,我绝不会使用PAE(在32位系统上超过4G的RAM)。 运行一个实际的64位内核和系统,​​你会得到更好的里程。

OOM应该只在malloc可能失败时触发。 (不是当你有很多交换可用)

32位内核可能是原因的一部分。 PAE使用不同的内存区域,可能是一个区域不允许malloc从另一个区域。

你有没有修改你的swappiness? (内核将如何使用交换。)cat / proc / sys / vm / swappiness?

您也可以调查vm.dirty_ratio或vm.lower_zone_protection = 100。

你是否抓住了内核恐慌? (串行控制台通常是一个很好的方法来做到这一点)

您也可以尝试使用您自己的过程监控软件来抢占OOM-Killer。 (看看Monit)

祝你好运

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1002704

运行Oracle / Java的RHEL4虚拟机通过OOM杀手来随机杀死进程详细信息即使ESX没有处于内存加载状态,OOM杀手也会杀死应用程序。 命令顶部显示正在caching很多内存,交换很难被使用。 解

当要复制的数据大小超过物理内存的大小时,OOM杀手开始随机查杀进程。

这可以通过运行来解决:

sysctl -w vm.lower_zone_protection 100

当lower_zone_protection设置为100时,它将空闲页面阈值增加100,从而更早地启动页面回收,并防止NFS(networking文件系统)远远落后于内核的内存需求。 这导致页面回收更快地发生,从而为区域提供更多的“保护”。 这个问题在RHEL中由Redhat识别,他们在下面的文章中提供了一个解决方法: