JVM优化涉及到两大方面我个人的理解 1.如何分配JVM的内存空间 2.我应该使用什么垃圾回收器 JVM产生的垃圾需要回收、回收有不同的回收器、 JVM的调优需要了解各个垃圾回收机制的原理、 终极目标:降低FULL GC出现的频率 (FULL GC出现会导致应用的暂停服务) 优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码: JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m" server:一定要作为第一个参数,在多个CPU时性能佳 -Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -Xmx:初始堆内存heap最大值,使用的最大内存 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。 -XX:PermSize:设定内存的永久保存区域 -XX:MaxPermSize:设定最大内存的永久保存区域 -XX:MaxNewSize: -Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k. +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。 -Xss:每个线程的Stack大小 -verbose:gc 现实垃圾收集信息 -Xloggc:gc.log 指定垃圾收集日志文件 -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一 -XX:+UseParNewGC :缩短minor收集的时间 -XX:+UseConcMarkSweepGC :缩短major收集的时间
使用jconsole.exe来监控jvm
配置文件更改
[tomcat@linux-node1 tomcat]$ vim bin/catalina.sh CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote # #启用远程监控JMX -Dcom.sun.management.jmxremote.port=12345 #jmx远程端口,Zabbix添加时必须一致 -Dcom.sun.management.jmxremote.authenticate=false #不开启用户密码认证 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.230.130" #运行tomcat服务IP(不要填写错了)
JConsole是一个可执行文件,在java根目录下bin文件;单击bin文件下JConsole.exe运行程序
还能手动执行GC
还有个工具jvisualvm.exe、这个可以同时监控多个
zabbix3.0版本可以利用javaget监听jvm的一些参数