以前在在catalina.sh中簡單設置JAVA_OPTS=-Xms1024m -Xmx2048m,沒起做用,CPU仍是超高,機器內存限制再大也設不了了,轉而到啓動腳本里設置了這一堆參數,沒有一個個的排查,到底哪一個參數起做用,但實際效果很明顯。java
啓動腳本將JAVA_OPTS參數設置:
web
vi /etc/rc.d/init.d/tomcatshell
#!/bin/bash # chkconfig: 2345 10 90 # description: Starts and Stops the Tomcat daemon. export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-7.0.53 export JAVA_HOME=/usr/java/jdk1.7.0_55 export JAVA_OPTS="-server \ -Dfile.encoding=UTF-8 \ -Dcatalina.logbase=/home/webapp/logs/tomcat7 \ -Dnet.sf.ehcache.skipUpdateCheck=true -XX:+DoEscapeAnalysis -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:+UseParallelGC -XX:MaxPermSize=512m -Xms1024m -Xmx2048m" export PATH=$JAVA_HOME/bin:$PATH TOMCAT_START=$CATALINA_HOME/bin/startup.sh TOMCAT_STOP=$CATALINA_HOME/bin/shutdown.sh # source function library. . /etc/rc.d/init.d/functions # check that networking is up. [ "${NETWORKING}" = "no" ] && exit 0 # check for tomcat script if [ ! -f $CATALINA_HOME/bin/catalina.sh ]; then echo "Tomcat not valilable..." exit fi start(){ echo -n "Starting Tomcat: " daemon $TOMCAT_START echo touch /var/lock/subsys/tomcat } stop(){ ps ax --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' \ | wc | awk '{print $2}' > /tmp/tomcat_process_count.txt read line < /tmp/tomcat_process_count.txt if [ $line -gt 0 ]; then echo -n "tomcat ( pid " ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' echo -n ") is running..." echo echo -n $"Shutting down Tomcat: " daemon $TOMCAT_STOP rm -f /var/lock/subsys/tomcat.pid echo else echo "Tomcat is stopped" fi } restart(){ stop start } status(){ ps ax --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' \ | wc | awk '{print $2}' > /tmp/tomcat_process_count.txt read line < /tmp/tomcat_process_count.txt if [ $line -gt 0 ]; then echo -n "tomcat ( pid " ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' echo -n ") is running..." echo else echo "Tomcat is stopped" fi } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 3 start ;; status) status ;; *) echo "Usage: tomcatd {start|stop|restart|status}" exit 1 esac exit 0
補充說明:apache
-XX:+UseParallelGC:選擇垃圾收集器爲並行收集器。此配置僅對年輕代有效。能夠同時並行多個垃圾收集線程,但此時用戶線程必須中止。這個設置報錯,jvm不能建立,取消。tomcat
-XX:+UseParNewGC:設置年輕代爲多線程收集。可與CMS收集同時使用。在serial基礎上實現的多線程收集器。bash
兩個都是年輕代的GC,也都是並行GC,區別就是,parallel gc 是提高吞吐量,parnew gc是serial gc的多線程版。多線程
若是還不能解決啓動慢的問題:app
在$CATALINA_HOME/bin/catalina.sh中加一句:dom
-Djava.security.egd=file:/dev/./urandom
參見: http://ifeve.com/jvm-random-and-entropy-source/webapp