应用程序中RAM大小增加的JVM崩溃

时间:2015-03-11 21:54:10

标签: java linux linux-kernel crash centos

我有一个应用程序在具有4 GB RAM的普通系统上正常运行,但是当我将系统RAM设置为12 GB时,系统崩溃,我需要重新启动应用程序。

我是否必须手动为RAM更改设置任何内核参数???

操作系统和崩溃转储的详细信息如下所示

OS

Linux manage 2.6.39.4-1smp #19 SMP Tue Nov 27 18:47:20 IST 2012 i686 unknown

/ var / log / messages崩溃

Mar 06 16:43:39 1425640419 kernel: Pid: 29750, comm: java Tainted: G        W   2.6.39.4-1smp #19
Mar 06 16:43:39 1425640419 kernel: Call Trace:
Mar 06 16:43:39 1425640419 kernel:  [<c105e36f>] bad_page+0xb4/0xcd
Mar 06 16:43:39 1425640419 kernel:  [<c105f6e8>] get_page_from_freelist+0x303/0x488
Mar 06 16:43:39 1425640419 kernel:  [<c105f9e2>] __alloc_pages_nodemask+0xe2/0x525
Mar 06 16:43:39 1425640419 kernel:  [<c106195d>] ? ____pagevec_lru_add_fn+0xa0/0xa6
Mar 06 16:43:39 1425640419 kernel:  [<c107d0c0>] alloc_pages_vma+0x15b/0x164
Mar 06 16:43:39 1425640419 kernel:  [<c106d477>] do_wp_page+0x402/0x686
Mar 06 16:43:39 1425640419 kernel:  [<c106df1e>] handle_pte_fault+0x823/0x879
Mar 06 16:43:39 1425640419 kernel:  [<c106ee53>] handle_mm_fault+0x159/0x16b
Mar 06 16:43:39 1425640419 kernel:  [<c101a868>] ? mm_fault_error+0xc9/0xc9
Mar 06 16:43:39 1425640419 kernel:  [<c101ab80>] do_page_fault+0x318/0x330
Mar 06 16:43:39 1425640419 kernel:  [<c101a868>] ? mm_fault_error+0xc9/0xc9
Mar 06 16:43:39 1425640419 kernel:  [<c1228f72>] error_code+0x5a/0x60
Mar 06 16:43:39 1425640419 kernel:  [<c101a868>] ? mm_fault_error+0xc9/0xc9
Mar 06 16:43:39 1425640419 kernel: Disabling lock debugging due to kernel taint
Mar 06 16:43:39 1425640419 kernel: BUG: Bad page state in process java  pfn:bf081
Mar 06 16:43:39 1425640419 kernel: page:f25e3020 count:0 mapcount:0 mapping:00b40000 index:0x0
Mar 06 16:43:39 1425640419 kernel: page flags: 0x10a30000(swapcache|mappedtodisk|mlocked)
search hit BOTTOM, continuing at TOP

1 个答案:

答案 0 :(得分:2)

嗯,我认为可能存在一些问题,可能与Java无关。我把它们放在最容易变硬的顺序中,而不是最不可能的顺序。

1)

如果您有12 GB RAM,请减少JVM分配。也许一些喘息的空间会有所帮助。

2)

首先要确保它不是安全/限制问题。 检查:

/etc/security/limits.conf

专门查找memlock限制。 Memlock为共享保留RAM,这可能适用于您的系统,也可能不适用。如果Memlock设置得太高,可能会出现某种奇怪的冲突。遵循规则:

可用内存(可分配)=已安装的RAM - 2 GB - Memlock

3)

如果您正在运行任何虚拟化软件(VirtualBox和其他一些虚拟化软件),则会知道this模块会污染内核。如果它存在,请将其删除并查看问题是否已修复。

4)

这可能是由硬件问题引起的。服务器可以运行数天甚至数周,直到由于(次要)硬件问题而发生崩溃。运行memtest并删除任何坏RAM棒。我记得读过一篇关于服务器的文章,该服务器每运行30天就会崩溃JavaEE。几个月后,这家伙跑了一个记忆,发现一个糟糕的RAM棒。它被替换了,崩溃停止了。

5)

执行命令

lsmod

寻找任何与众不同的东西,特别是专有的驱动程序。这些通常是内核污点的罪魁祸首。如果可能,请将它们移除。

6)

如果你已经到了这里,我担心你不得不做一些额外的挖掘来找到污点的原因。几乎总是污点是由非GPL兼容的内核模块引起的。这应该超出JVM的范围(除非你有一个插件)。查看this文章,了解并解决内核污点问题。

我不能确定这些是否是导致问题的原因,但前几个很容易测试并且花费的时间很少。希望这可以让你走上正轨。