Linux 系统下 Tomcat 的服务配置和性能优化
来源:靑龍一笑的博客 作者:靑龍一笑 发布时间:2016-04-07 20:09:35 点击量:938 评论:0
近来发现很多 linux 系统管理员对 tomcat 系统服务的配置不是很规范,其实,Tomcat 自带了一个守护进程管理工具 jsvc,可以用它来配置 Tomcat 的系统服务。
为了演示的需要,我准备了 jdk 和 tomcat:
[root@RicenOS opt]# pwd
/opt
[root@RicenOS opt]# ls
java tomcat
/opt
[root@RicenOS opt]# ls
java tomcat
进入到 tomcat 的 bin 目录,解压 commons-daemon-native.tar.gz:
[root@RicenOS opt]# cd tomcat/bin/
[root@RicenOS bin]# tar xvf commons-daemon-native.tar.gz
[root@RicenOS bin]# tar xvf commons-daemon-native.tar.gz
进入到解压后的 unix 子目录,配置并编译:
[root@RicenOS bin]# cd commons-daemon-1.0.15-native-src/unix/
[root@RicenOS unix]# ./configure --with-java=/opt/java && make
[root@RicenOS unix]# ./configure --with-java=/opt/java && make
把编译生成的 jsvc 文件拷贝到 tomcat 的 bin 目录下:
[root@RicenOS unix]# cp jsvc ../../
编写服务脚本,把这个脚本放到 /etc/rc.d/init.d 目录下:
[root@RicenOS unix]# vi /etc/rc.d/init.d/tomcat
内容参考如下:
#!/bin/sh
# chkconfig: 35 46 49
# description: Apache tomcat6
DESC="Apache tomcat6"
JAVA_HOME="/opt/java"
CATALINA_HOME="/opt/tomcat"
JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=512M -Xms1024M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError"
SERVICE_START_WAIT_TIME=10
CATALINA_PID="$CATALINA_HOME/logs/catalina.pid"
CATALINA_OUT="$CATALINA_HOME/logs/catalina.out"
CLASSPATH="$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"
LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/conf/logging.properties"
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
CATALINA_TMPDIR="$CATALINA_HOME/temp"
JSVC="$CATALINA_HOME/bin/jsvc"
CATALINA_MAIN=org.apache.catalina.startup.Bootstrap
RETVAL=0
echo_success() {
echo -en "\\033[60G\033[32m"
echo -n "[ "
echo -n $"OK"
echo -n " ]"
echo -ne "\033[0m\n"
RETVAL=0
}
echo_failure() {
echo -en "\\033[60G\033[31m"
echo -n "[ "
echo -n $"FAILED"
echo -n " ]"
echo -ne "\033[0m\n"
RETVAL=1
}
start(){
echo -n "Starting $DESC ..."
"$JSVC" \
-java-home "$JAVA_HOME" \
-pidfile "$CATALINA_PID" \
-wait "$SERVICE_START_WAIT_TIME" \
-outfile "$CATALINA_OUT" \
-errfile "&1" \
-classpath "$CLASSPATH" \
"$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS \
-Dcatalina.home="$CATALINA_HOME" \
-Dcatalina.base="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
-Duser.timezone=GMT+08 \
$CATALINA_MAIN
sleep 3
RETVAL=$?
if [ "$RETVAL" -eq 0 ]; then
echo_success
else
echo_failure
fi
return $RETVAL
}
stop(){
echo -n "Stopping $DESC ..."
"$JSVC" \
-stop \
-pidfile "$CATALINA_PID" \
-classpath "$CLASSPATH" \
-Dcatalina.home="$CATALINA_HOME" \
-Dcatalina.base="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
$CATALINA_MAIN
RETVAL=$?
if [ "$RETVAL" -eq 0 ]; then
echo_success
else
echo_failure
fi
return $RETVAL
}
repair(){
PIDLIST=`ps -ef | grep "$CATALINA_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -n "$PIDLIST" ]; then
for PID in $PIDLIST
do
kill -9 $PID
echo "Kill $DESC PID:$PID"
done
echo -n "$DESC repair success."
echo_success
else
echo "No $DESC PID alive."
fi
}
status(){
PIDLIST=`ps -ef | grep "$CATALINA_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -n "$PIDLIST" ]; then
echo "$DESC is running."
else
echo "$DESC is not running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
repair)
repair
;;
status)
status
RETVAL=0
;;
*)
echo "Usage: $0 {start | stop | repair | status}"
RETVAL=1
;;
esac
exit $RETVAL
# chkconfig: 35 46 49
# description: Apache tomcat6
DESC="Apache tomcat6"
JAVA_HOME="/opt/java"
CATALINA_HOME="/opt/tomcat"
JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=512M -Xms1024M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError"
SERVICE_START_WAIT_TIME=10
CATALINA_PID="$CATALINA_HOME/logs/catalina.pid"
CATALINA_OUT="$CATALINA_HOME/logs/catalina.out"
CLASSPATH="$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"
LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/conf/logging.properties"
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
CATALINA_TMPDIR="$CATALINA_HOME/temp"
JSVC="$CATALINA_HOME/bin/jsvc"
CATALINA_MAIN=org.apache.catalina.startup.Bootstrap
RETVAL=0
echo_success() {
echo -en "\\033[60G\033[32m"
echo -n "[ "
echo -n $"OK"
echo -n " ]"
echo -ne "\033[0m\n"
RETVAL=0
}
echo_failure() {
echo -en "\\033[60G\033[31m"
echo -n "[ "
echo -n $"FAILED"
echo -n " ]"
echo -ne "\033[0m\n"
RETVAL=1
}
start(){
echo -n "Starting $DESC ..."
"$JSVC" \
-java-home "$JAVA_HOME" \
-pidfile "$CATALINA_PID" \
-wait "$SERVICE_START_WAIT_TIME" \
-outfile "$CATALINA_OUT" \
-errfile "&1" \
-classpath "$CLASSPATH" \
"$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS \
-Dcatalina.home="$CATALINA_HOME" \
-Dcatalina.base="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
-Duser.timezone=GMT+08 \
$CATALINA_MAIN
sleep 3
RETVAL=$?
if [ "$RETVAL" -eq 0 ]; then
echo_success
else
echo_failure
fi
return $RETVAL
}
stop(){
echo -n "Stopping $DESC ..."
"$JSVC" \
-stop \
-pidfile "$CATALINA_PID" \
-classpath "$CLASSPATH" \
-Dcatalina.home="$CATALINA_HOME" \
-Dcatalina.base="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
$CATALINA_MAIN
RETVAL=$?
if [ "$RETVAL" -eq 0 ]; then
echo_success
else
echo_failure
fi
return $RETVAL
}
repair(){
PIDLIST=`ps -ef | grep "$CATALINA_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -n "$PIDLIST" ]; then
for PID in $PIDLIST
do
kill -9 $PID
echo "Kill $DESC PID:$PID"
done
echo -n "$DESC repair success."
echo_success
else
echo "No $DESC PID alive."
fi
}
status(){
PIDLIST=`ps -ef | grep "$CATALINA_HOME" | grep -v "grep" | awk '{print $2}'`
if [ -n "$PIDLIST" ]; then
echo "$DESC is running."
else
echo "$DESC is not running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
repair)
repair
;;
status)
status
RETVAL=0
;;
*)
echo "Usage: $0 {start | stop | repair | status}"
RETVAL=1
;;
esac
exit $RETVAL
改变文件权限:
[root@RicenOS unix]# chmod +x /etc/rc.d/init.d/tomcat
配置系统启动:
[root@RicenOS unix]# chkconfig --level 35 tomcat on
修改 tomcat/conf 目录下的 server.xml 文件:
[root@RicenOS unix]# vi ../../../conf/server.xml
主要修改以下这段:
<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192"
maxThreads="1000" minSpareThreads="100" maxSpareThreads="5000"
minProcessors="50" maxProcessors="500" enableLookups="false"
redirectPort="8443" acceptCount="1000" connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="utf-8" />
maxThreads="1000" minSpareThreads="100" maxSpareThreads="5000"
minProcessors="50" maxProcessors="500" enableLookups="false"
redirectPort="8443" acceptCount="1000" connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="utf-8" />
版权所有 © 2005-2023 靑龍一笑的博客 Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.