java - Linux 中的 native 内存使用率似乎比通过 JVM 本身(例如通过 JConsole)观察到的要高得多

标签 java linux redhat

我们有一个客户在装有 IBM JVM 1.6 的 RedHat Linux Server 5.6 (Tikanga) 上使用 WebSphere 7.0。 当我们查看操作系统的内存使用报告时,我们看到非常高的数字,并且由于内存不足,操作系统在某个时候开始使用 SWAP 内存。 另一方面,JConsole 图表显示了完全正常的内存行为 - 堆大小会增加,直到 GC 在预期时被调用,而堆大小在正常周期中下降到约 30%。非堆符合预期并且大小非常恒定。

有谁知道这种额外的 native 内存使用量可以归因于什么?

最佳答案

我会检查你正在查看常驻内存而不是虚拟内存(后者可能非常高)

如果交换,即使是轻微的交换也会导致 JVM 在 GC 上暂停很长时间。如果您的应用程序没有锁定几秒钟或几分钟,它可能没有交换(另一个程序可能是)

如果您的程序确实在使用 native 内存,这很可能是由于您导入了 native 库。如果您查看/proc/{id}/mmap,这可能会为您提供线索,但更有可能必须检查您正在加载哪些 native 库。


注意:如果您有很多线程,所有这些读取的堆栈空间可能会加起来。如果可以的话,我会尽量将它们保持在最低限度,但我已经看到有数千个 JVM,这会消耗 native 内存。 GUI 组件也可以使用 native 内存,但我假设您没有这些。

关于java - Linux 中的 native 内存使用率似乎比通过 JVM 本身(例如通过 JConsole)观察到的要高得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460408/

相关文章:

java - InputStream.bytesRemaining 小于应有的值

java - @WithMockUser 自定义用户实现

Java从列表中查找部分匹配的字符串

ubuntu - 如何给 NIS 用户默认的 ubuntu(桌面用户)组权限

Java套接字超时不适用

linux - 编写一个 bash shell 脚本,在用户定义的时间内消耗恒定数量的 RAM

linux - 自定义 vim 语法高亮脚本——为什么它们在 Windows 中工作而不在 Linux 中工作?

linux - 如何在 Linux 中暂停/恢复进程

ruby - Chef Recipe,sssd配置

linux - 如何在重启 Linux 机器之前添加条件