2013-08-27 58 views
2
  1. 我有一個Java(1.6 U25)工藝運行在Linux(centos的6.3 x64)的與JAVA_OPTS =「 - 服務器-Xms128m -Xmx256M -Xss256K -XX:PermSize = 32M -XX:MaxPermSize參數= 32M -XX:MaxDirectMemorySize = 128M -XX:+ UseAdaptiveSizePolicy -XX:MaxDirectMemorySize = 128M -XX:+ UseParallelGC -XX:+ UseParallelOldGC -XX:GCTimeRatio = 39 -XX:+ PrintGCDetails -XX:+ PrintGCDateStamps -Xloggc:gc.log」時,Java應用程序使用thrift 0.8.0 lib;爲什麼我的java進程使用內存(Linux RES)不斷增加?

  2. 每天運行TOP命令,java進程的RES值會不斷增加(從80MB到1.2GB(啓動應用程序一個月後)),但看到jvm堆大小保持在100到200MB左右,並查看GC日誌每分鐘約1〜2次PSyoungGC,每天PSOld GC 1〜2次,無內存泄漏。

那麼,爲什麼java進程使用mem會不斷增加並且大大超過JVM設置?我覺得java過程真的用mem會等於Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM自己用過的mem =大約416MB?

相關信息:Virtual Memory Usage from Java under Linux, too much memory used

+0

見http://stackoverflow.com/questions/26041117/growing-resident-memory-usage-rss-of-java-process –

回答

2

我建議你看看PMAP的過程。這會給你一個本地內存使用情況的細目。你沒有太多控制權的內存是

  • 線程使用的總棧空間。
  • 的存儲器的大小映射文件
  • 共享庫的大小。
  • 本地庫內存使用情況。例如套接字緩衝區(如果您有足夠的套接字)

這些的一些組合正在使用差異。

相關問題