2013-08-27 64 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的过程。这会给你一个本地内存使用情况的细目。你没有太多控制权的内存是

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

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

相关问题