在尝试使用 UseLargePages 作为JVM参数之一时,我遇到了一个奇怪的“内核恐慌”问题。当我尝试执行任何java命令时,操作系统挂起,我被迫重新bbot。我使用的是64位CentOS 6.2(Linux 2.6.32-220.23.1)。以下是我为设置LargePages所做的工作。
kernel.shmmax = 4294967296
vm.nr_hugepages = 2048
vm.hugetlb_shm_group = 502
root soft memlock 4194304
root hard memlock 4194304
cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
HugePages_Total: 2048
HugePages_Free: 2048
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
最后,我添加了“-XX:+ UseLargePages”作为JVM启动参数之一。现在,我运行任何java命令,例如, “java -version”,操作系统挂起,我不得不诉诸重新启动。这是操作系统日志中的堆栈跟踪。内核恐慌 - 不同步:致命异常 Pid:1790,comm:java Tainted:GD ---------------- 2.6.32-220.23.1.el6.centos.plus.x86_64#1
Kernel panic - not syncing: Fatal exception
Pid: 1790, comm: java Tainted: G D ---------------- 2.6.32-220.23.1.el6.centos.plus.x86_64 #1
Call Trace:
[] ? panic+0x78/0x143
[] ? xen_restore_fl_direct_end+0x0/0x1
[] ? _spin_unlock_irqrestore+0x1c/0x20
[] ? oops_end+0xe4/0x100
[] ? no_context+0xfb/0x260
[] ? __alloc_pages_nodemask+0x111/0x940
[] ? __bad_area_nosemaphore+0x125/0x1e0
[] ? __raw_callee_save_xen_pmd_val+0x11/0x1e
[] ? bad_area_nosemaphore+0x13/0x20
[] ? __do_page_fault+0x31d/0x480
[] ? __lru_cache_add+0x40/0x90
[] ? xen_set_pte_at+0xaf/0x170
[] ? page_add_new_anon_rmap+0x9d/0xf0
[] ? handle_pte_fault+0x487/0xb50
[] ? do_page_fault+0x3e/0xa0
[] ? page_fault+0x25/0x30
[] ? __unmap_hugepage_range+0x1f2/0x300
[] ? __unmap_hugepage_range+0xdf/0x300
[] ? unmap_hugepage_range+0x54/0x90
[] ? unmap_vmas+0xae7/0xc00
[] ? release_pages+0x21c/0x250
[] ? check_events+0x12/0x20
[] ? xen_force_evtchn_callback+0xd/0x10
[] ? check_events+0x12/0x20
[] ? unmap_region+0x91/0x130
[] ? do_munmap+0x2b6/0x3a0
[] ? sys_munmap+0x56/0x80
[] ? system_call_fastpath+0x16/0x1b
Xen Minimal OS!
不确定导致此问题的原因。我不是操作系统专家,因此没有太多线索来解释日志。如果我通过注释 kernel.shmmax = 4294967296 来关闭UseLargePages选项,则一切正常。机器的总存储量为15gb。我正在使用 - Xmx6144M -XX:MaxPermSize = 128m 作为JVM内存参数。是否与CentOS 6.2有关?
任何指针都将受到赞赏。