我有一个 Java 进程,一段时间后因 SIGSEGV 而中止。在我使用更多 RAM 升级服务器后,这种情况开始发生。在不同的 JVM 上测试后,我怀疑这可能是硬件问题。但 memtest86 没有检测到任何问题。
那么,我还能做什么来检测问题的根源?我是否应该逐个取出 RAM 模块来检测故障模块?
服务器运行在64位OpenSuse11.3上。
看起来内存不是 ECC 内存。我有一套这样的内存 (3*4GB * 2 = 24GB):
答案1
我们跑Memtest86+针对新系统进行 48-72 小时的测试,多年来,我们发现了许多直到第二天或第三天才出现的错误。几次测试根本不够。
另外,不要混合 ECC 和非 ECC,是的,您可能必须移除/调整/重新测试 RAM 模块才能找到罪魁祸首。
答案2
请记住,段错误通常是由于编程错误引起的,例如缓冲区溢出、释放后使用以及空指针取消引用。
答案3
还有一个建议,关于Memtests86+。Memtest 肯定会检查所有内存,但有时硬件故障仅在机器的温度条件达到一定水平时才会显示。而且 memtest 不会对磁盘和系统的其他部分施加压力。
如果您认为温度可能是一个问题,请尝试在比平常更差的温度条件下运行内存测试。
答案4
有一个应用程序可以帮助您在运行系统时检查 RAM 中的错误。我的意思是您无需重新启动系统并停止工作。RAM 检查和您的工作可以并行运行。名为
记忆测试仪
如果你正在安装 Ubuntu,你可以安装它
sudo apt-get install memtester