gpt4 book ai didi

java - Jboss(Java) 进程对驻留内存使用量的逐渐增加

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:58 25 4
gpt4 key购买 nike

我们面临Java进程的常驻内存逐渐增长的问题。我们将 Xmx 定义为 4096 MB 和 XX:MaxPermSize=1536m。定义了 256K 的 Xss 的 Activity 线程数约为 1500。

当应用服务器(JBoss 6.1)启动时使用的驻留内存是~5.6GB(一直使用top命令监控它);它逐渐增长(每天大约 0.3 到 0.5 Gb)直到它增长到 ~7.4 Gb,当内核的 OOM killer 由于 RAM 空间不足(服务器有 9GB 的 RAM)而杀死进程时。

我们一直在定期监视线程转储 - 没有线程泄漏的嫌疑。我们仍然无法弄清楚这些额外的内存是从哪里来的。

Pmap 输出显示了一些 Anon block (除了堆栈和堆的常规 block ),大部分在 64 Mb 的区域中,这些 block 在堆、perm gen 和堆栈的内存使用方面未被考虑。

在heap dump中我们也尝试寻找DirectByteBuffers和sun.misc.Unsafe对象,它们一般用于非堆内存分配,但是对象的数量和内存容量似乎都是名义上的。即使在这些对象被 GC 之后,是否仍有未释放的 native 内存?任何其他可能导致用完非堆内存的类?

我们的应用程序本身确实有本地调用,但某些第三方库可能有它们。

关于可能导致此问题的任何想法?任何其他细节/工具可以进一步帮助调试这种增加?我们应该注意的任何已知问题?平台:在 Centos 5.6 上运行的 Jboss 6.1。

最佳答案

Java 和 glibc >= 2.10(包括 Ubuntu >= 10.04、RHEL >= 6)存在一个已知问题。

解决方法是设置这个环境。多变的:
导出 MALLOC_ARENA_MAX=4

有一篇关于设置 MALLOC_ARENA_MAX 的 IBM 文章 https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en

This blog post says

resident memory has been known to creep in a manner similar to a memory leak or memory fragmentation.

在 Google 或 SO 上搜索 MALLOC_ARENA_MAX 以获取更多引用。

您可能还想调整其他 malloc 选项以优化分配内存的低碎片:

# tune glibc memory allocation, optimize for low fragmentation
# limit the number of arenas
export MALLOC_ARENA_MAX=2
# disable dynamic mmap threshold, see M_MMAP_THRESHOLD in "man mallopt"
export MALLOC_MMAP_THRESHOLD_=131072
export MALLOC_TRIM_THRESHOLD_=131072
export MALLOC_TOP_PAD_=131072
export MALLOC_MMAP_MAX_=65536

关于java - Jboss(Java) 进程对驻留内存使用量的逐渐增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com