【问题标题】:Why is set and actual value of PermSize and MaxPermSize different?为什么 PermSize 和 MaxPermSize 的设置值和实际值不同?
【发布时间】:2016-07-18 07:49:40
【问题描述】:

我已使用 tomcat 的 JAVA_OPTS 变量设置 PermSize 和 MaxPermSize 的值,如下所示

JAVA_OPTS="$JAVA_OPTS -XX:PermSize=512M"
JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=512M"

并将 Xms 和 Xmx 的值设置为

JAVA_OPTS="$JAVA_OPTS -Xms1024M"
JAVA_OPTS="$JAVA_OPTS -Xmx1024M"

但是当我使用命令 jmap -heap [ process id ] 检查 perm-gen 的实际大小时,它们显示为

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 792723456 (756.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   **PermSize         = 21757952 (20.75MB)**
   **MaxPermSize      = 85983232 (82.0MB)**
   G1HeapRegionSize = 0 (0.0MB)


Perm Generation:
   **capacity = 69271552 (66.0625MB)**
   **used     = 69247376 (66.03944396972656MB)**
   **free     = 24176 (0.0230560302734375MB)**
   **99.96509967035242% used**

为什么实际分配的永久空间与使用属性 PermSize 和 MaxPermSize 分配的空间不同?

附加信息:安装tomcat服务器的linux机器的RAM为:

             total       used       free     shared    buffers     cached
Mem:       3089928    3006592      83336          0      67828    1874144
-/+ buffers/cache:    1064620    2025308
Swap:      1020088        112    1019976

【问题讨论】:

  • 我猜你只是指定了一个与总堆相比太大的数字。为什么你想要一个只有整个堆一半大小的烫发代?
  • @praveen 您使用的 Java 版本是什么?
  • 17592186044415 MB ???
  • 可能你的变量没有考虑进去。服务器看起来内存也很低。
  • 所以你设置了一些环境变量。你把那些放在哪里了?你有exported 他们吗?你是如何启动 Tomcat 的?

标签: java tomcat jvm out-of-memory permgen


【解决方案1】:

在 Jenkins 构建期间丢失了 setenv.sh 文件,该文件从 tomcat.env 获取自定义用户配置,从而导致了问题。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2019-06-17
    • 2020-06-05
    • 2013-09-07
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多