java - Centos RES内存不断增加并越过java的初始和最大内存

标签 java linux garbage-collection

我们有一个在 Centos 6.4 上运行的 java 应用程序,我们注意到 RES 大约为 378m,这比分配的最大值 256m 还多。这是否表示我们的应用程序正在泄漏?到目前为止,还没有发生 GC,但是有很多 YGC?这说明什么?

下面是我的 jstat 结果和 MAT 结果。

Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      2331438.3  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331443.3  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331448.4  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331453.4  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331458.4  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331463.4  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331468.4  56.95   0.00  62.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331473.4  56.95   0.00  63.24  82.79  80.37   1362   54.337     0    0.000   54.337
      2331478.4  56.95   0.00  63.24  82.79  80.37   1362   54.337     0    0.000   54.337
      2331483.4  56.95   0.00  63.78  82.79  80.37   1362   54.337     0    0.000   54.337
      2331488.4  56.95   0.00  63.78  82.79  80.37   1362   54.337     0    0.000   54.337
      2331493.4  56.95   0.00  63.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331498.4  56.95   0.00  63.79  82.79  80.37   1362   54.337     0    0.000   54.337
      2331503.4  56.95   0.00  63.79  82.79  80.37   1362   54.337     0    0.000   54.337

MAT 结果

java.lang.ref.Finalizer @ 0xf5e19670 40 92,688 
next java.lang.ref.Finalizer @ 0xf5e1a6a8 40 93,024 
next java.lang.ref.Finalizer @ 0xf5e1bda0 40 122,768 


Suspect 1.

The class "java.lang.ref.Finalizer", loaded by "<system class loader>", occupies 1,337,176 (30.93%) bytes. The memory is accumulated in one instance of "java.lang.ref.Finalizer" loaded by "<system class loader>".

Keywords
java.lang.ref.Finalizer


Suspect 2
 6 instances of "com.mysql.jdbc.JDBC4Connection", loaded by "sun.misc.Launcher$ExtClassLoader @ 0xf58bf000" occupy 432,624 (10.01%) bytes. 

Biggest instances:

•com.mysql.jdbc.JDBC4Connection @ 0xf61c54f8 - 94,864 (2.19%) bytes. 
•com.mysql.jdbc.JDBC4Connection @ 0xf61c4678 - 86,600 (2.00%) bytes. 
•com.mysql.jdbc.JDBC4Connection @ 0xf61c4bf8 - 85,456 (1.98%) bytes. 
•com.mysql.jdbc.JDBC4Connection @ 0xf626c348 - 68,000 (1.57%) bytes. 
•com.mysql.jdbc.JDBC4Connection @ 0xf626c7d0 - 68,000 (1.57%) bytes. 


Keywords
com.mysql.jdbc.JDBC4Connection
sun.misc.Launcher$ExtClassLoader @ 0xf58bf000

最佳答案

-Xmx 只限制 JVM 的堆内存空间 除了堆空间之外,JVM 正在为以下内容分配内存

  • Perm 空间(类元数据)默认高达 64 MiB
  • 线程堆栈(每个线程 256k,可配置)
  • 应用程序明确分配的 I/O 缓冲区和堆外缓冲区

关于java - Centos RES内存不断增加并越过java的初始和最大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796562/

相关文章:

java - Eclipse Java : Eclipse complains of missing curly brace in class

linux - 使用 pkill 防止进程自杀

go - goroutine不会将内存返回操作系统

java - 就内存使用而言,使用 float[] 数组还是 16 个 float 哪个更好?

java - Files.newDirectoryStream 与 Files.list

java - 如果 Boolean 为 True,如何返回字符串

java - 大规模时间触发事件处理

linux - screen 命令: C-a C-\does not work

c++ - 蛇的头距离 body 几点(C++ 游戏)

javascript - 什么是 JavaScript 垃圾回收?