Java程序运行时,总是报java.lang.OutOfmemoryError: PermGen Space和java.lang.OutOfmemoryError: Java heap space内存溢出异常的报错。
网上查要修改JVM的参数,加大java的运行内存,可以解决这个报错。
但由于程序直接指向jar包运行,没有地方去修改java的参数。
在使用java -jar 启动的时候
-Xms1024m -Xmx1024m -XX:PermSize=1024m -XX:MaxPermSize=2048m
将运行时的内存提前定义好,这样就达到修改内置tomcat运行时内存的目的。
nohup java -Xms1024m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=2048m -cp $CLASSPATH com.xxx.xxx > /dev/null 2>&1 &
最后我们查一下内存使用情况
jmap -heap pid(ps -ef|grep java查看启动项目的pid是什么)
Attaching to process ID 14824, please wait…
 Debugger attached successfully.
 Server compiler detected.
 JVM version is 24.71-b01
using thread-local object allocation.
 Mark Sweep Compact GC
Heap Configuration:
 MinHeapFreeRatio = 40
 MaxHeapFreeRatio = 70
 MaxHeapSize = 536870912 (512.0MB)
 NewSize = 1310720 (1.25MB)
 MaxNewSize = 17592186044415 MB
 OldSize = 5439488 (5.1875MB)
 NewRatio = 2
 SurvivorRatio = 8
 PermSize = 134217728 (128.0MB)
 MaxPermSize = 268435456 (256.0MB)
 G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
 New Generation (Eden + 1 Survivor Space):
 capacity = 161021952 (153.5625MB)
 used = 149734416 (142.79786682128906MB)
 free = 11287536 (10.764633178710938MB)
 92.9900638640873% used
 Eden Space:
 capacity = 143130624 (136.5MB)
 used = 143113880 (136.4840316772461MB)
 free = 16744 (0.01596832275390625MB)
 99.98830159505208% used
 From Space:
 capacity = 17891328 (17.0625MB)
 used = 6620536 (6.313835144042969MB)
 free = 11270792 (10.748664855957031MB)
 37.00416201636905% used
 To Space:
 capacity = 17891328 (17.0625MB)
 used = 0 (0.0MB)
 free = 17891328 (17.0625MB)
 0.0% used
 tenured generation:
 capacity = 357957632 (341.375MB)
 used = 71209248 (67.91043090820312MB)
 free = 286748384 (273.4645690917969MB)
 19.893205685303002% used
 Perm Generation:
 capacity = 134217728 (128.0MB)
 used = 99136528 (94.54396057128906MB)
 free = 35081200 (33.45603942871094MB)
 3.86246919631958% used
 在最后能看出 内存占用率 Perm Generation:
3.86246919631958% used。
查看日志再无报错,持续一个月运行正常,再无溢出的报错
                










