您的位置:首页 > 运维架构 > Tomcat

tomcat7 cpu 占用率过高调整

2015-01-28 20:03 197 查看
摘要: 通过调整启动脚本

之前在在catalina.sh中简单设置JAVA_OPTS=-Xms1024m -Xmx2048m,没起作用,CPU还是超高,机器内存限制再大也设不了了,转而到启动脚本里设置了这一堆参数,没有一个个的排查,到底哪个参数起作用,但实际效果很明显。

启动脚本将JAVA_OPTS参数设置:

vi /etc/rc.d/init.d/tomcat

#!/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


补充说明:

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。可以同时并行多个垃圾收集线程,但此时用户线程必须停止。这个设置报错,jvm不能创建,取消。

-XX:+UseParNewGC:设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。

两个都是年轻代的GC,也都是并行GC,区别就是,parallel gc 是提升吞吐量,parnew gc是serial gc的多线程版。

如果还不能解决启动慢的问题:

在$CATALINA_HOME/bin/catalina.sh中加一句:

-Djava.security.egd=file:/dev/./urandom

参见: http://ifeve.com/jvm-random-and-entropy-source/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息