Java 活动内存与内核转储内存不匹配

Java 活动内存与内核转储内存不匹配,java,memory,corruption,memory-corruption,Java,Memory,Corruption,Memory Corruption,我们试图调查应用程序上的内存损坏,我们看到的确切问题可以在应用程序的实时内存中看到(即,添加的调试代码显示损坏的信息),但是当我们查看此时获取的核心转储时,数据没有损坏 从我对核心转储过程的初步理解来看,这可能是由于操作系统刷新每个缓冲区、完成部分写入等原因造成的 任何人都可以详细了解到底发生了什么,以及是否有任何方法来确定是什么导致了腐败 mprotect()阻止所有写入,而不仅仅是非所有进程,这是我们的应用程序有大量R/W访问权限的数据(并且只在新机器上有问题)结果是RHEL4及其运行的内核

我们试图调查应用程序上的内存损坏,我们看到的确切问题可以在应用程序的实时内存中看到(即,添加的调试代码显示损坏的信息),但是当我们查看此时获取的核心转储时,数据没有损坏

从我对核心转储过程的初步理解来看,这可能是由于操作系统刷新每个缓冲区、完成部分写入等原因造成的

任何人都可以详细了解到底发生了什么,以及是否有任何方法来确定是什么导致了腐败


mprotect()阻止所有写入,而不仅仅是非所有进程,这是我们的应用程序有大量R/W访问权限的数据(并且只在新机器上有问题)

结果是RHEL4及其运行的内核,客户使用最新内核升级到RHEL5,问题消失了

转储文件是来自与调试代码完全相同的可执行文件,还是来自不同的发布版本?完全相同,它是一个运行在JavaOh上的Websphere应用程序,您可能需要提供更多的环境详细信息,因为Java代码本身无法造成内存损坏。我知道,我们认为这是机器上内存“同步”的问题,没有正确刷新,但我需要证明这一点。这是一个Linux操作系统,运行在新的戴尔R710硬件上,这是极不可能的。除非在代码中使用JNI,否则内存损坏也不太可能发生。按照大致的可能性顺序:您的Java代码是错误的;配置问题;你误解了API;网络问题;Websphere中有一个bug;JVM中有一个bug;你的操作系统中有一个bug;你的硬件需要退款。