關於linux下java進程內存佔用大於Xmx設置,且一直提升

服務器很久前出現了這個問題, 

網上查了一大堆

1,java進程的內存佔用大概是 堆內存+堆外內存(DirectBufferSize)+JVM的一些佔用

2, -Xmx設置的是堆內存, 如果不具體指定 -XX:MaxDirectMemorySize(堆外內存),也相當於設置了XX:MaxDirectMemorySize

3,可以用pmap -x pid來查看具體內存使用, 用/proc/{pid}/smaps 來更詳細查看

 

不過,發現用-XX:MaxDirectMemorySize設置了之後, 還是沒效果

繼續查,發現有glibc的問題, 需要安裝tcmalloc,在啓動參數裏面增加 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so(根據你的安裝位置),  但是隻解決了虛擬內存高,實際內存還在增加

https://www.sohu.com/a/200462136_505827

 

最終發現, jdk版本 1.7.80 等幾個版本, 有一些java.util.zip.Deflate.init() 方面的內存不釋放的bug(我也沒仔細排查),

用jdk 1.7.76替換之, 運行遊戲服務器7天, 內存沒繼續上升

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章