我在linux上运行java(1.6 u25)进程(centos 6.3 x64),JAVA_OPTS =“ - server -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 app使用了thrift 0.8.0 lib;
每天运行TOP命令,java进程RES值会不断增加(从80MB到1.2GB(启动应用程序一个月后)),但是看到jvm堆大小保持在100到200MB左右,并且看到GC记录每分钟PSyoungGC约1~2倍,每天2~2次PSOld GC,无内存泄漏。
那么,为什么使用mem的java进程会不断增加并大大超过JVM设置?我觉得java进程真的用过mem会等于Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM自用的mem =约416MB?
关系信息:Virtual Memory Usage from Java under Linux, too much memory used
答案 0 :(得分:2)
我建议您查看pmap以了解该过程。这将为您提供本机内存使用情况的细分。你没有那么多控制权的记忆是
这些的一些组合正在使用差异。