我有一個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)不斷增加?
每天運行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
見http://stackoverflow.com/questions/26041117/growing-resident-memory-usage-rss-of-java-process –