linux java调优
Tomcat 运行过程遇到Caused by: java.lang.OutOfMemoryError: PermGen space或者java.lang.OutOfMemoryError: Java heap space错误。
- 异常原因
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的。Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同。GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
Java heap space:JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
- 解决办法
修改TOMCAT_HOME/bin/catalina.sh文件:
OS specific support. $var must be set to either true or false.
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true"
cygwin=false
darwin=false
加入以上红色JAVA_OPTS行记录后重启tomcat服务,其中JAVA_OPTS各参数的具体数值大小须根据实际服务器物理内存大小进行分配。
- 监控JVM
4.1 查看jdk安装路径
可选择的命令:
(1) # echo $JAVA_HOME
(2) # whereis java
(3) # which java (java执行路径)
(4) # echo $PATH
本例:
4.2 查看java进程
采用jdk提供的jps(JavaVirtual Machine Process Status Tool)小工具,可查看当前Java进程。
本例:进入/usr/java/jdk1.7.0_79目录后,执行bin/jps -v:
可看到Bootstrap 前面的数字10142即为Java进程号,同时可看到JAVA_OPTS参数生效情况。
4.3 查看JVM的GC情况
使用jstat工具查看,语法为:
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]参数解释:
*Options -选项,我们一般使用-gcutil查看GC情况
vmid -VM的进程号,即当前运行的java进程号
interval -间隔时间,单位为秒或毫秒
本例:同样在/usr/java/jdk1.7.0_79目录中查看java进程号10142且每隔3秒输出1次,执行# bin/jstat -gcutil 10142 3000 :
参数说明如下:
S0 -Heap上的Survivor space 0区已使用空间的百分比
S1 -Heap上的Survivor space 1区已使用空间的百分比
E -Heap上Eden space区已使用空间的百分比
O -Heap上的Old space区已使用空间的百分比,达到100%,就是内存溢出了
P -Perm space区已使用空间的百分比,达到100%,就是内存溢出了
YGC -从应用程序启动到采样时发生Yang GC 的次数
YGCT -从应用程序启动到采样时Yang GC所用的时间【单位秒】
FGC -从应用程序启动到采样时Full GC的次数
FGCT -从应用程序启动到采样时Full GC所用的时间
GCT -从应用程序启动到采样时用于垃圾回收的总时间【单位秒】
通过监控O、P数值情况,再次调整JAVA_OPTS相关参数大小达到优化目的。
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