前些日子手癢寫了個一步安裝JDK+TOMCAT的腳本,感受不是很完善,沒有充分發揮TOMCAT的性能, java
此次花了點時間完善下了腳本: linux
1. 給TOMCAT自動加上APR支持和參數調優(個人腳本中給Xmx設置了一半的物理內存,由於個人機器不全跑WEB應用,童鞋們能夠在腳本中自行修改), web
2. 爲了腳本的通用性,垃圾收集器新生代採用並行收集器-XX:+UseParallelGC,並設置了最大指望響應時間(單位毫秒)-XX:MaxGCPauseMillis=100,打開了-XX:+UseAdaptiveSizePolicy, shell
JVM會根據負載自動調整新生代中Eden區和survivor區的大小,永生代Perm區貌似也會自動調整,沒有去改動它, apache
3. 舊生代也是並行收集器-XX:+UseParallelOldGC,默認新生代佔最大堆-Xmx的3/8,舊生代佔5/8 tomcat
4. 腳本修改了hosts文件,並打開了tomcat的jmxremote,端口是1234,你能夠在客戶機用jconsole遠程鏈接tomcat服務器機監控它的運行狀況,而且打開了垃圾回收日誌,放在tomcat的logs目錄下,名爲gc.log 服務器
5. 增大tomcat上傳war包的文件大小至500MB,開機會自啓動tomcat。 app
6.增長了一個啓動tomcat或強行殺tomcat進程重啓的腳本 less
本腳本容許重複執行屢次,不影響執行結果, ssh
--------------------------------------------------------------
Linux開發環境,基本上帶gcc,make,openssh,zlib,openssl,openssl-devel就好了(測試採用 CentOS 6.4 32位)
--------------------------------------------------------------
ORACLE JDK7 不限版本(測試採用 jdk-7u45-linux-i586.tar.gz)
TOMCAT7 不限版本(測試採用apache-tomcat-7.0.47.tar.gz)
apr 不限版本(測試採用apr-1.4.8.tar.gz)
apr-util 不限版本(測試採用apr-util-1.5.2.tar.gz)
tips:執行腳本時,這四個軟件包和腳本需放在同一目錄下
--------------------------------------------------------------
備份原/etc/profile
備份原/etc/rc.local
備份原/etc/hosts
安裝JDK
把JDK環境變量寫入/etc/profile
安裝tomcat
安裝apr
安裝apr-util
安裝tomcat-native.tar.gz
把tomcat環境變量寫入/etc/profile
把APR LD_LIBRARY_PATH環境變量寫入/etc/profile
把tomcat自啓動命令寫入/etc/rc.local
給tomcat添加一個管理員,帳號:tomcat;密碼:tomcat
在tomcat的/bin/catalina.sh加上啓動參數」CATALINA_OPTS······」
增大tomcat上傳war包的文件大小至500MB(這大小總該夠了)
執行完腳本後,手工執行一遍source /etc/profile讓新環境變量生效
--------------------------------------------------------------
install_jdk_and_tomcat_with_apr.sh
#!/bin/sh ###### record your original path ###### echo "record your original path ......" sleep 2 ORIGINALPATH=`pwd` echo "your original path: ${ORIGINALPATH}" sleep 2 ###### set /etc/hosts for tomcat remote jmx ###### IPADDR=`ifconfig|awk 'NR==2{print $2}'|sed 's/addr://'` HOSTNAME=`hostname` echo "ipaddress: ${IPADDR}, hostname: ${HOSTNAME}" sleep 2 if [ -e /etc/hosts.bak ];then echo "restore original /etc/hosts.bak ......" sleep 2 cp /etc/hosts.bak /etc/hosts else echo "backup original /etc/hosts.bak ......" sleep 2 cp /etc/hosts /etc/hosts.bak fi sed -i "s/127.0.0.1/${IPADDR}/g" /etc/hosts echo "${IPADDR} ${HOSTNAME}">>/etc/hosts ###### backup original /etc/profile ###### if [ -e /etc/profile.bak ];then echo "restore original /etc/profile ......" sleep 2 cp /etc/profile.bak /etc/profile else echo "backup original /etc/profile ......" sleep 2 cp /etc/profile /etc/profile.bak fi ###### backup original /etc/rc.local ###### if [ -e /etc/rc.local.bak ];then echo "restore original /etc/rc.local ......" sleep 2 cp /etc/rc.local.bak /etc/rc.local else echo "backup original /etc/rc.local ......" sleep 2 cp /etc/rc.local /etc/rc.local.bak fi ###### install jdk ###### if [ -e /usr/java ];then echo "deleting old or existed jdk ......" sleep 2 rm -rf /usr/java echo "installing jdk ......" mkdir /usr/java sleep 2 tar zxvf jdk* -C /usr/java else echo "installing jdk ......" sleep 2 mkdir /usr/java tar zxvf jdk* -C /usr/java fi ###### write JDK environment into /etc/profile ###### JDKPATH=`ls /usr/java` echo ${JDKPATH} echo "write JDK environment into /etc/profile ......" sleep 2 echo " ">>/etc/profile echo "# jdk environment">>/etc/profile echo "JAVA_HOME=/usr/java/${JDKPATH}">>/etc/profile echo 'PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile echo 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile echo 'export JAVA_HOME'>>/etc/profile echo 'export PATH'>>/etc/profile echo 'export CLASSPATH'>>/etc/profile ###### install tomcat ###### if [ -e /usr/local/apache-tomcat* ];then echo "deleting old or existed tomcat ......" sleep 2 rm -rf /usr/local/apache-tomcat* echo "installing tomcat ......" sleep 2 tar zxvf apache-tomcat* -C /usr/local else echo "installing tomcat ......" sleep 2 tar zxvf apache-tomcat* -C /usr/local fi ###### install apr ###### if [ -e /usr/local/apr ];then echo "deleting old or existed apr ......" sleep 2 rm -rf /usr/local/apr echo "installing apr ......" sleep 2 tar zxvf apr-1* -C /tmp cd /tmp/apr-1* ./configure make make install else echo "installing apr ......" sleep 2 tar zxvf apr-1* -C /tmp cd /tmp/apr-1* ./configure make make install fi ###### install apr-util ###### cd ${ORIGINALPATH} echo "installing apr-util ......" sleep 2 tar zxvf apr-util* -C /tmp cd /tmp/apr-util* ./configure --with-apr=/usr/local/apr make make install echo "deleting /tmp/apr* ......" sleep 2 rm -rf /tmp/apr* ###### install tomcat-native.tar.gz ###### cd /usr/local/apache-tomcat*/bin echo "installing tomcat-native ......" sleep 2 tar zxvf tomcat-native.tar.gz cd tomcat-native-*/jni/native ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/${JDKPATH} --with-ssl=yes make make install ###### write tomcat environment into /etc/profile ###### echo "write tomcat environment into /etc/profile ......" sleep 2 cd /usr/local/apache-tomcat* TOMCATPATH=`pwd` echo "tomcat home path: ${TOMCATPATH}" echo " ">>/etc/profile echo "# tomcat environment">>/etc/profile echo "TOMCAT_HOME=${TOMCATPATH}">>/etc/profile echo 'PATH=$TOMCAT_HOME/bin:$PATH'>>/etc/profile ###### write apr environment into /etc/profile ###### echo "write apr environment into /etc/profile ......" sleep 2 echo " ">>/etc/profile echo "# apr environment">>/etc/profile echo 'LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib'>>/etc/profile echo 'export LD_LIBRARY_PATH'>>/etc/profile ###### write tomcat anto startup.sh into /etc/rc.local ###### echo "write tomcat anto startup.sh into /etc/rc.local ......" sleep 2 echo "source /etc/profile">>/etc/rc.local echo "${TOMCATPATH}/bin/startup.sh">>/etc/rc.local ###### add username : tomcat password : tomcat into tomcat-users.xml ###### echo "backup original tomcat-users.xml ......" sleep 2 cp ${TOMCATPATH}/conf/tomcat-users.xml ${TOMCATPATH}/conf/tomcat-users.xml.bak echo "add username : tomcat password : tomcat into tomcat-users.xml ......" sleep 2 echo '<tomcat-users>'>${TOMCATPATH}/conf/tomcat-users.xml echo '<role rolename="admin-gui"/>'>>${TOMCATPATH}/conf/tomcat-users.xml echo '<role rolename="manager-gui"/>'>>${TOMCATPATH}/conf/tomcat-users.xml echo '<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui"/>'>>${TOMCATPATH}/conf/tomcat-users.xml echo '</tomcat-users>'>>${TOMCATPATH}/conf/tomcat-users.xml ###### set tomcat JAVA_OPTS ###### echo "backup original catalina.sh ......" sleep 2 cp ${TOMCATPATH}/bin/catalina.sh ${TOMCATPATH}/bin/catalina.sh.bak MEMORY=`free -m | awk 'NR==2 {print $2}'` HALFMEM=$(expr ${MEMORY} / 2) QUARTERMEM=$(expr ${MEMORY} / 4) PERMMEM=$(expr ${MEMORY} / 8) echo "physical memory : ${MEMORY} MB" sleep 2 echo "set tomcat CATALINA_OPTS ......" sleep 2 sed -i "2i\ " ${TOMCATPATH}/bin/catalina.sh sed -i "3i\CATALINA_OPTS=\"-Djava.awt.headless=true -Dfile.encoding=UTF-8 " ${TOMCATPATH}/bin/catalina.sh sed -i "4i\ -server -Xms${HALFMEM}m -Xmx${HALFMEM}m -Xss256k" ${TOMCATPATH}/bin/catalina.sh sed -i "5i\ -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy -XX:+UseParallelOldGC" ${TOMCATPATH}/bin/catalina.sh #sed -i "5i\ -XX:PermSize=${PERMMEM}m -XX:MaxPermSize=${PERMMEM}m " ${TOMCATPATH}/bin/catalina.sh #sed -i "6i\ -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled " ${TOMCATPATH}/bin/catalina.sh #sed -i "7i\ -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods" ${TOMCATPATH}/bin/catalina.sh ###### pring gc log ###### sed -i "6i\ -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:${TOMCATPATH}/logs/gc.log " ${TOMCATPATH}/bin/catalina.sh sed -i "7i\ -XX:+DisableExplicitGC " ${TOMCATPATH}/bin/catalina.sh ###### open tomcat jmx port ###### sed -i "8i\ -Dcom.sun.management.jmxremote.port=1234 " ${TOMCATPATH}/bin/catalina.sh sed -i "9i\ -Dcom.sun.management.jmxremote.ssl=false " ${TOMCATPATH}/bin/catalina.sh sed -i "10i\ -Dcom.sun.management.jmxremote.authenticate=false \"" ${TOMCATPATH}/bin/catalina.sh ###### set tomcat max-file-size ###### echo "backup original webapps/manager/WEB-INF/web.xml ......" sleep 2 cp ${TOMCATPATH}/webapps/manager/WEB-INF/web.xml ${TOMCATPATH}/webapps/manager/WEB-INF/web.xml.bak echo "set tomcat max-file-size ......" sleep 2 sed -i 's/50MB/500MB/g' ${TOMCATPATH}/webapps/manager/WEB-INF/web.xml sed -i 's/52428800/524288000/g' ${TOMCATPATH}/webapps/manager/WEB-INF/web.xml ###### cp reboot_tomcat_force.sh into ${TOMCAT_HOME}/bin ###### cd ${ORIGINALPATH} if [ -e reboot_tomcat_violently.sh ];then echo 'file reboot_tomcat_violently.sh existed and copy it into ${TOMCAT_HOME}/bin/ ......' sleep 2 cp reboot_tomcat_violently.sh ${TOMCATPATH}/bin/ cd ${TOMCATPATH}/bin echo "creat soft link rbt.sh to reboot_tomcat_violently.sh ......" sleep 2 ln -s reboot_tomcat_violently.sh rbt.sh else echo "file reboot_tomcat_violently.sh is not found ......" sleep 2 fi ###### echo tips ###### echo "" echo "tips: if you want the new environment variable to take effect ,don't forget execute" echo "source /etc/profile" echo "manually!!!" #source /etc/profile
reboot_tomcat_violently.sh
#!/bin/sh source /etc/profile if [ `ps -ef|grep java|awk '$3==1 {print $2}'`>1 ]; then echo "tomcat pid: `ps -ef|grep java|awk '$3==1 {print $2}'` " echo "kill tomcat ......" sleep 2 kill -9 `ps -ef|grep java|awk '$3==1 {print $2}'` echo "start tomcat ......" sleep 2 startup.sh tail -f ${TOMCAT_HOME}/logs/catalina.out else echo "tomcat is not running yet, start tomcat ......" startup.sh tail -f ${TOMCAT_HOME}/logs/catalina.out fi