记一次JVM调优(Permanent Generation)

最近在一次搭建公司系统运行环境的时候tomcat总是报出
java.lang.OutOfMemoryError PermGen space
的问题,即内存溢出
在解决这个问题的时候

一.问题解决

此处用到一个命令:jmap
显示java堆中的详细信息(进程号7180)

C:\Users\zhangyu>jmap -heap 7180
Attaching to process ID 7180, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1004535808 (958.0MB) //最大堆大小,默认为物理内存的1\4
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB   //64位操作系统理论无限制
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB) //非堆区大小
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 163119104 (155.5625MB)
   used     = 1433824 (1.367401123046875MB)
   free     = 161685280 (154.19509887695312MB)
   0.8790043378364805% used
From Space:
   capacity = 65536 (0.0625MB)
   used     = 0 (0.0MB)
   free     = 65536 (0.0625MB)
   0.0% used
To Space:
   capacity = 8060928 (7.6875MB)
   used     = 0 (0.0MB)
   free     = 8060928 (7.6875MB)
   0.0% used
PS Old Generation
   capacity = 669712384 (638.6875MB)
   used     = 89397320 (85.25592803955078MB)
   free     = 580315064 (553.4315719604492MB)
   13.348613843162859% used
PS Perm Generation
   capacity = 85983232 (82.0MB)
   used     = 85983168 (81.99993896484375MB)
   free     = 64 (6.103515625E-5MB)
   99.99992556688262% used

可以发现 Perm Generation 明显不够用,因此需要增大该空间

-XX:PermSize=128M
-XX:MaxPermSize=256M

而在上一篇文章中,对JVM的内存说明并不是很详细
补充以下:

二.JVM内存

1.整体内存可以分为堆区和非堆区
堆区
所有new的对象都在堆区
新生代、中生代、老年代源自于对堆区的细分
Java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
-XX:MaxNewSize=518 等是对新生代的最大值进行设置

非堆区:
包括持久带, 用来存放静态文件,如Java类、方法等。

几个参数:
1.堆(Heap)内存分配
-Xms : 初始堆大小
-Xmx: 最大堆大小,可设置为与Xms一样
-XX:NewSize=n:设置年轻代大小

2.堆(Heap)内存分配
-XpermSize = n
-XMaxPermSize = n
注意-XMaxPermSize和-Xmx的总和不能超过物理机的最大内存值









参考:
https://www.cnblogs.com/koik/p/4452029.html
JVM参数解析

你可能感兴趣的:(JAVA基础,web)