服務器很久前出現了這個問題,
網上查了一大堆
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天, 內存沒繼續上升