【问题标题】:High Perm Generation and Low Old Generation高烫代和低老代
【发布时间】:2013-02-08 17:26:55
【问题描述】:

我们实际上已经将 jvm 的内存增加到 256M,现在老一代看起来非常小,但 Perm 一代相当高,接近 80%。通过 jstat 捕获的示例数据如下。高烫代在这里说明什么?

Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
       173656.0 1152.0 1216.0 864.0   0.0   84928.0  26778.0   174784.0   11967.6   21248.0 17057.8     62    3.653   0      0.000    3.653
       173671.0 1152.0 1216.0 864.0   0.0   84928.0  27843.4   174784.0   11967.6   21248.0 17057.8     62    3.653   0      0.000    3.653
       173686.1 1152.0 1216.0 864.0   0.0   84928.0  27843.4   174784.0   11967.6   21248.0 17057.8     62    3.653   0      0.000    3.653
       173701.1 1152.0 1216.0 864.0   0.0   84928.0  27843.4   174784.0   11967.6   21248.0 17057.8     62    3.653   0      0.000    3.653
       173716.0 1152.0 1216.0 864.0   0.0   84928.0  27843.4   174784.0   11967.6   21248.0 17057.8     62    3.653   0      0.000    3.653

重启前的示例

Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
       261578.8   0.00  16.89  68.70   8.89  80.74     45    2.551     0    0.000    2.551
       261593.8   0.00  16.89  70.97   8.89  80.74     45    2.551     0    0.000    2.551
       261608.8   0.00  16.89  72.49   8.89  80.74     45    2.551     0    0.000    2.551
       261623.8   0.00  16.89  75.00   8.89  80.74     45    2.551     0    0.000    2.551
       261638.8   0.00  16.89  77.76   8.89  80.74     45    2.551     0    0.000    2.551
       261653.8   0.00  16.89  80.77   8.89  80.74     45    2.551     0    0.000    2.551
       261668.8   0.00  16.89  83.03   8.89  80.74     45    2.551     0    0.000    2.551
       261683.8   0.00  16.89  85.29   8.89  80.74     45    2.551     0    0.000    2.551
       261698.8   0.00  16.89  87.57   8.89  80.74     45    2.551     0    0.000    2.551
       261713.8   0.00  16.89  90.57   8.89  80.74     45    2.551     0    0.000    2.551
       261728.8   0.00  16.89  93.35   8.89  80.74     45    2.551     0    0.000    2.551
       261743.8   0.00  16.89  95.61   8.89  80.74     45    2.551     0    0.000    2.551
       261758.8   0.00  16.89  98.61   8.89  80.74     45    2.551     0    0.000    2.551
       261773.8  20.83   0.00   1.36   8.95  80.74     46    2.685     0    0.000    2.685
       261788.8  20.83   0.00   4.66   8.95  80.74     46    2.685     0    0.000    2.685
       261803.8  20.83   0.00   6.88   8.95  80.74     46    2.685     0    0.000    2.685
       261818.8  20.83   0.00   9.67   8.95  80.74     46    2.685     0    0.000    2.685
       261833.8  20.83   0.00  10.78   8.95  80.74     46    2.685     0    0.000    2.685
       261848.8  20.83   0.00  13.56   8.95  80.74     46    2.685     0    0.000    2.685
       261863.9  20.83   0.00  15.78   8.95  80.74     46    2.685     0    0.000    2.685
       261878.8  20.83   0.00  19.32   8.95  80.74     46    2.685     0    0.000    2.685
       261893.8  20.83   0.00  21.55   8.95  80.74     46    2.685     0    0.000    2.685
       261908.8  20.83   0.00  24.33   8.95  80.74     46    2.685     0    0.000    2.685
       261923.8  20.83   0.00  27.11   8.95  80.74     46    2.685     0    0.000    2.685
       261938.8  20.83   0.00  29.84   8.95  80.74     46    2.685     0    0.000    2.685
       261953.8  20.83   0.00  32.06   8.95  80.74     46    2.685     0    0.000    2.685
       261968.8  20.83   0.00  34.85   8.95  80.74     46    2.685     0    0.000    2.685
       261983.8  20.83   0.00  38.89   8.95  80.74     46    2.685     0    0.000    2.685

重启后的示例

Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
          135.8   0.00   0.00  72.71   0.00  70.88      0    0.000     0    0.000    0.000
          150.8   0.00   0.00  76.71   0.00  70.91      0    0.000     0    0.000    0.000
          165.8   0.00   0.00  78.71   0.00  70.94      0    0.000     0    0.000    0.000
          180.7   0.00   0.00  82.71   0.00  72.79      0    0.000     0    0.000    0.000
          195.8   0.00   0.00  84.71   0.00  72.81      0    0.000     0    0.000    0.000
          210.8   0.00   0.00  88.71   0.00  72.90      0    0.000     0    0.000    0.000
          225.8   0.00   0.00  92.71   0.00  72.93      0    0.000     0    0.000    0.000
          240.8   0.00   0.00  94.71   0.00  72.95      0    0.000     0    0.000    0.000
          255.8   0.00   0.00 100.00   0.00  73.02      0    0.000     0    0.000    0.000
          270.8   0.00  78.72   6.68   0.00  73.49      1    0.286     0    0.000    0.286
          285.8   0.00  78.72  10.66   0.00  73.50      1    0.286     0    0.000    0.286
          300.8   0.00  78.72  14.32   0.00  73.54      1    0.286     0    0.000    0.286
          315.8   0.00  78.72  18.89   0.00  73.57      1    0.286     0    0.000    0.286
          330.8   0.00  78.72  24.85   0.00  73.57      1    0.286     0    0.000    0.286
          345.8   0.00  78.72  30.18   0.00  76.84      1    0.286     0    0.000    0.286
          360.8   0.00  78.72  32.82   0.00  76.86      1    0.286     0    0.000    0.286
          375.8   0.00  78.72  36.04   0.00  76.87      1    0.286     0    0.000    0.286
          390.8   0.00  78.72  40.00   0.00  76.89      1    0.286     0    0.000    0.286
          405.8   0.00  78.72  43.96   0.00  76.91      1    0.286     0    0.000    0.286
          420.8   0.00  78.72  46.61   0.00  76.92      1    0.286     0    0.000    0.286
          435.8   0.00  78.72  47.63   0.00  76.92      1    0.286     0    0.000    0.286
          450.8   0.00  78.72  47.63   0.00  76.92      1    0.286     0    0.000    0.286
          465.8   0.00  78.72  47.63   0.00  76.92      1    0.286     0    0.000    0.286
          480.8   0.00  78.72  47.63   0.00  76.92      1    0.286     0    0.000    0.286
          495.8   0.00  78.72  48.54   0.00  76.93      1    0.286     0    0.000    0.286
          510.8   0.00  78.72  48.54   0.00  76.93      1    0.286     0    0.000    0.286
          525.8   0.00  78.72  48.54   0.00  76.93      1    0.286     0    0.000    0.286
          540.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          555.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          570.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          585.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          600.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          615.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          630.8   0.00  78.72  49.11   0.00  76.93      1    0.286     0    0.000    0.286
          645.8   0.00  78.72  49.98   0.00  76.93      1    0.286     0    0.000    0.286
          660.8   0.00  78.72  49.98   0.00  76.93      1    0.286     0    0.000    0.286
          675.8   0.00  78.72  49.98   0.00  76.93      1    0.286     0    0.000    0.286
          690.8   0.00  78.72  49.98   0.00  76.93      1    0.286     0    0.000    0.286
          705.8   0.00  78.72  49.98   0.00  76.93      1    0.286     0    0.000    0.286
          720.8   0.00  78.72  50.55   0.00  76.93      1    0.286     0    0.000    0.286
          735.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          750.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          765.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          780.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          795.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          810.8   0.00  78.72  51.12   0.00  76.93      1    0.286     0    0.000    0.286
          825.8   0.00  78.72  51.69   0.00  76.93      1    0.286     0    0.000    0.286
          840.8   0.00  78.72  51.69   0.00  76.93      1    0.286     0    0.000    0.286
          855.8   0.00  78.72  51.69   0.00  76.93      1    0.286     0    0.000    0.286
          870.8   0.00  78.72  51.69   0.00  76.93      1    0.286     0    0.000    0.286
          885.8   0.00  78.72  52.26   0.00  76.95      1    0.286     0    0.000    0.286
          900.8   0.00  78.72  52.26   0.00  76.95      1    0.286     0    0.000    0.286
          915.8   0.00  78.72  53.12   0.00  76.95      1    0.286     0    0.000    0.286
          930.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
          945.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
          960.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
          975.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
          990.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
         1005.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
         1020.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
         1035.8   0.00  78.72  53.69   0.00  76.95      1    0.286     0    0.000    0.286
         1050.8   0.00  78.72  54.27   0.00  76.95      1    0.286     0    0.000    0.286
         1065.8   0.00  78.72  54.27   0.00  76.95      1    0.286     0    0.000    0.286
         1080.8   0.00  78.72  54.27   0.00  76.95      1    0.286     0    0.000    0.286
         1095.8   0.00  78.72  54.27   0.00  76.95      1    0.286     0    0.000    0.286
         1110.8   0.00  78.72  55.12   0.00  76.97      1    0.286     0    0.000    0.286
         1125.8   0.00  78.72  55.46   0.00  76.97      1    0.286     0    0.000    0.286
         1140.8   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1155.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1170.8   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1185.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1200.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1215.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1230.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1245.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1260.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1275.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1290.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1305.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286
         1320.9   0.00  78.72  56.03   0.00  76.97      1    0.286     0    0.000    0.286

使用的类是

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Date;
import java.text.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.*;
import java.util.concurrent.LinkedBlockingQueue;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;

代码的骨架。

public static void main(String[] args) {   

      new sServer7888();

   }
sServer7888() {


    try{
    final ServerSocket serverSocketConn = new ServerSocket(7888);               
    while (true){
    try{
       Socket socketConn1 = serverSocketConn.accept();
          new Thread(new ConnectionHandler(socketConn1)).start();                       
    }
    catch(Exception e){
        e.printStackTrace(System.out);
    }
       }
    } 
    catch (Exception e)     {
         e.printStackTrace(System.out);
    }

}


class ConnectionHandler implements Runnable {

  private Socket receivedSocketConn1;
    ConnectionHandler(Socket receivedSocketConn1) {
      this.receivedSocketConn1=receivedSocketConn1;
    }

    public void run() {

      while ((nextChar=readIn1.read()) != -1) {

         completeMessage += (char) nextChar;     
         if (nextChar == '*')
         {

          //calling of various function depends on the input data
          completeMessage="";

         }
       }   
      }
   }
}

【问题讨论】:

  • Perm 生成包含加载的类,如果它占用了一些不会被清除的空间,也没有什么问题。为简单起见,将其视为“常量”(当然,如果您使用动态类创建/加载,它可以增长)。低老年代意味着你的应用没有很多长寿命的对象,你可以给年轻代更多的空间。
  • @Alexey 加载的类是什么意思?我已经用我调用的课程更新了我的问题。
  • 我的意思是你的应用程序的类+来自其他库的依赖库类(及其依赖项)。不过不用管它 17mb 的烫发空间太小了,无法引起注意。
  • @Alexey 我所拥有的实际上是一个套接字应用程序。客户端连接发送数据,执行大量 sql 插入、更新和选择。我注意到的问题是它从 80.33 增长到 80.45。所以看起来有什么需要担心的吗?
  • 没什么好担心的,它可能会有点波动。根据我的经验,即使在高负载的应用程序中,我也从未遇到过永久代内存泄漏。

标签: java garbage-collection jvm jstat


【解决方案1】:

-Xmx 标志是伊甸园空间、幸存者空间和老年代使用的大小。 PermGen 位于此之上,并配置了 -XX:MaxPermGen 标志。

永久代的默认大小为 64MB(根据 JVM 的实现而不同,但大多数为 64MB),因此如果需要更多容量,则有备用容量。

【讨论】:

  • 我通过 yajsw 守护进程运行我的应用程序,因此我在其 conf 文件中设置了初始内存和最大内存。我将尝试查看是否有任何可用于 MaxPermGen 的配置。通常它会继续增长吗?
  • 它将继续增长直到达到最大大小,然后你会得到一个 OutOfMemoryError: PermGen 抛出。但是,存储在 PermGen 中的东西是永久存在的(因此得名),所以如果它无限期地增长,您需要担心内存泄漏问题,一旦所有内容加载完毕,它的使用应该会趋于平稳。
  • 我拥有的实际上是一个套接字应用程序。客户端连接发送数据,执行大量 sql 插入、更新和选择。我注意到的问题是它从 80.33 增长到 80.45。所以看起来有什么需要担心的吗?
  • 这听起来很典型,当应用程序刚刚启动时,您应该会看到 PermGen 的使用量迅速增长,然后以越来越慢的速度继续增长。应用程序运行数小时后,它可能仍会增加,具体取决于它尝试执行的操作。无论哪种方式,64MB 限制都足够低,任何真正的泄漏都会很明显,因为它会导致OutOfMemoryError;如果你从来没有看到,没有什么可担心的。
  • 是的,我可以看到它以缓慢的速度增长,但我想主动监控并查看是否有任何问题。我的应用程序基本上是一个套接字应用程序客户端发送数据,然后根据接收到的数据类型,通过几个不同的功能运行大量的 sql 插入、更新和选择。你如何确定它是 64Mb 你在哪里寻找这个?我应该增加这个,因为我已经将我的最大和初始内存都增加到了 256M?
【解决方案2】:

您的应用程序正在运行 - 这里没有什么特别的。

  • 在这 60 秒内没有运行 GC(既不是小型 GC,也不是完整 GC)
  • 似乎生成了最少数量的对象,伊甸园空间略有增加

如果应用程序之前运行过(意味着所有类都已加载),您不必担心PermGen 空间。

否则,如果您能显示所有与内存相关的系统参数,那就太好了。

关于第二个和第三个样本:

第二个示例(重新启动之前)显示应用程序从未运行过 FullGC。这意味着,对象的空间足够。同样在技术上永久代空间没有变化,这意味着应用程序已经加载了所有需要的类,不会发生新的类加载。

第三个示例(重新启动后)显示应用程序正在缓慢加载所有必需的类,最终在技术上几分钟内没有加载新类。这并不意味着它永远不会发生,它只是意味着应用程序在 20 分钟后已经加载了所需的类。因此,预计不会出现新的大幅增长

尽管应用程序的某些隐藏部分可能会变为活动状态,并且您将加载许多类,但假设您的空间比实际分配的空间多 5 倍。还有,这是一个有限的过程,一个类被加载后,就不会再被加载了。

【讨论】:

  • 我的最大内存和初始内存都设置为 256M,这里的问题是我一直通过 yajsw 运行它,这就像在 linux 环境中运行 java 应用程序的守护进程,所以让我知道你还想要什么我来设置? PermGen 是否会继续增长,因为我的应用程序是基于套接字的,每次都会建立新的连接,这会增加 PermGen 吗?
  • PermGen 中,JVM 存储Class 定义。这就是我的意思是如果应用程序在您运行之前您不必担心,因为所有类定义都已加载。此外,您使用了可能的默认 64M 中的 17M,如果 任何其他 类加载会发生,PermGen 仍然允许扩展。您还可以观察到,在前 15 秒(由于某些操作),Eden 的使用量有所增加,但 PermGen 保持不变。
  • 我得到了更多的说明,以使我的应用程序具有相当多的全局变量和一些巨大的功能。这将如何影响烫发一代?当你说类定义是那些导入的类还是我的类?你如何确定我得到 17M 是 17057.8 吗?当我运行 ./jinfo -flag MaxPermSize 28018 显示为 -XX=85983232 和 ./jinfo -flag PermSize 28018 显示为 -XX=21757952 时,我有点困惑,但是当我运行 ./jstat -gcutil -t 28018 15s 但P 列显示为 76.33?当我运行 ./jstat -gc -t 28018 15s 并且 PC 是 21248 时,为什么会有差异?
  • jstat -gcutilP的列代表已用烫发空间的百分比,所以76.33%还不错。实际上,为 PermGen 分配了 21248.0 KB,使用了 17057.8 KB,但如果需要,PermGen 可以扩展到 cca 84000 KB。所以,不用担心一切都好,你的应用 PermGen 空间几乎可以增长到当前大小的 5 倍。
  • 在类定义中所有类都涉及,甚至包括JVM类、框架类、应用程序类。 instances(对象)的数量并不重要,它们进入另一个内存区域(Eden、Survivor、Old)。此外,功能的数量和大小都是一样的。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2013-10-24
  • 2012-10-16
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多