Oracle的文檔還指出:
測試同樣的事情的其他方式
注:有在Linux內核中的已知漏洞,可能導致JVM是時崩潰t與-XX:UseNUMA。該錯誤在2012年得到修復,因此這不應該影響最新版本的Linux內核。要查看你的內核是否有這個bug,你可以運行native reproducer。
這是我在這裏轉載證明它的簡單:
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/reproducer.c
要構建再生器中,您可能需要安裝numactl的或numactl的-devel的包根據您的分佈。詳情請參閱man numa_maps
。
#include <numaif.h>
#include <numa.h>
#include <stddef.h>
#include <sys/mman.h>
#include <stdint.h>
int main(void) {
if (numa_all_nodes_ptr == (void*)0) {
return -1;
}
size_t pagesize = getpagesize();
void* mapped_memory = mmap(NULL, 3 * pagesize, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (mapped_memory == MAP_FAILED) {
return -2;
}
void* page0 = mapped_memory;
void* page1 = (void*)((uintptr_t)page0 + pagesize);
void* page2 = (void*)((uintptr_t)page1 + pagesize);
// Set up the last page as interleaved.
mbind(page2, pagesize, MPOL_INTERLEAVE, numa_all_nodes_ptr->maskp,
numa_all_nodes_ptr->size, 0);
// Setup the last two pages as interleaved.
mbind(page1, 2 * pagesize, MPOL_INTERLEAVE,
numa_all_nodes_ptr->maskp, numa_all_nodes_ptr->size, 0);
*((char*)page2) = 2;
*((char*)page1) = 1;
*((char*)page0) = 0; // Crash here, when mbind_merge was broken.
return 0;
}
所以,我把不確定性意味着2.6.19是第安全版本。
您是否考慮將內核升級到更新的內核? – 2012-04-11 16:17:35
RHEL 5.1(2007-11-07)已經很老了,可能是它的升級時間。 – 2012-04-11 16:23:58
@Peter根據我的經驗,使用NUMA處理器的人通常不是負責更新軟件的人,必須經歷相當多的官僚主義才能更新它。剛剛看到一個* python 2.4 *安裝在一臺超級計算機上有2k內核.. – Voo 2012-04-11 16:34:46