为什么我的java进程使用内存(Linux RES)不断增加?

时间:2013-08-27 07:52:45

标签: java linux memory jvm

  1. 我在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;

  2. 每天运行TOP命令,java进程RES值会不断增加(从80MB到1.2GB(启动应用程序一个月后)),但是看到jvm堆大小保持在100到200MB左右,并且看到GC记录每分钟PSyoungGC约1~2倍,每天2~2次PSOld GC,无内存泄漏。

  3. 那么,为什么使用mem的java进程会不断增加并大大超过JVM设置?我觉得java进程真的用过mem会等于Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM自用的mem =约416MB?

    关系信息:Virtual Memory Usage from Java under Linux, too much memory used

1 个答案:

答案 0 :(得分:2)

我建议您查看pmap以了解该过程。这将为您提供本机内存使用情况的细分。你没有那么多控制权的记忆是

  • 线程使用的总堆栈空间。
  • 内存映射文件的大小
  • 共享库的大小。
  • 本机库内存使用情况。例如套接字缓冲区(如果你有足够的套接字)

这些的一些组合正在使用差异。