【问题标题】:JVM Crash for RAM size increase in application应用程序中 RAM 大小增加导致 JVM 崩溃
【发布时间】:2015-03-11 21:54:10
【问题描述】:

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

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

下面给出了操作系统和故障转储的详细信息

操作系统

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

【问题讨论】:

    标签: java linux linux-kernel crash centos


    【解决方案1】:

    嗯,我认为可能存在一些问题,可能与 Java 无关。我按照最容易到最难的顺序排列了它们,而不是从最可能到最不可能。

    1)

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

    2)

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

    /etc/security/limits.conf
    

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

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

    3)

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

    4)

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

    5)

    运行:

    lsmod
    

    并寻找任何不寻常的东西,尤其是专有驱动程序。这些通常是内核污染的罪魁祸首。如果可能,请删除它们。

    6)

    如果你已经到了这里,恐怕你需要做一些额外的挖掘才能找到污染的原因。几乎所有的污点都是由不符合 GPL 的内核模块引起的。这应该超出 JVM 的范围(除非您有插件)。查看this 文章以查找和解决内核污染问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2015-10-21
      • 2016-06-04
      • 2011-08-24
      • 2014-05-03
      相关资源
      最近更新 更多