本文來自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn
摘要:
- 本文是自己根據公司架構部署tomcat方法整理出來的文本
修改系統內核
修改linux的一些系統參數,以優化系統性能
- 修改LIMITS.CONF
$ vi /etc/security/limits.conf # 增加 * soft nofile 65536 * hard nofile 65536
- 修改SYSCTL.CONF
# 備份 $ mv /etc/sysctl.conf /etc/sysctl.conf.bak $ vi /etc/sysctl.conf # 插入 net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000
安裝APR
- 下載apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz
安裝apr,方便tomcat 開啟aoi
apr下載地址
$ tar -zxvf apr-1.5.2.tar.gz $ tar -zxvf apr-util-1.5.4.tar.gz $ yum install gcc gcc-c++ autoconf libtool # apr安裝 $ cd apr-1.5.2 $ ./configure --prefix=/usr/local/apr # --prefix=/usr/local/apr指apr的安裝路徑,以下要用到 $ make $ make install # apr-util安裝 $ cd apr-util-1.5.4 $ ./configure --with-apr=/usr/local/apr # --with-apr=/usr/local/apr 指定APR安裝路徑 $ make $ make install
安裝JDK1.7
下載jdk-7u76-linux-x64.tar.gz 拷貝到/usr/local下面
cd /usr/local $ tar -zxvf jdk-7u76-linux-x64.tar.gz # mv 重命名 為jdk1.7.0_76 mv jdk1.7.0_76 jdk1.7 # 在環境變量/etc/profile里配置JAVA_HOME JAVA_HOME=/usr/local/jdk1.7 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH # 環境變量立即生效 $ source .bash_profile
編譯安裝tomcat
創建DATA目錄
$ mkdir /data
復制TOMCAT到目標目錄並解壓
$ cp apache-tomcat-7.0.64.tar.gz /data $ tar -zxvf apache-tomcat-7.0.64.tar.gz # mv 重命名為你所需的項目名稱,如zhnx $ mv apache-tomcat-7.0.64 zhnx
進入TOMCAT精簡目錄
請參照下面步驟一步一步順序操作
$ cd zhnx # 把項目除了bin lib conf目錄的其它全部刪除 $ rm -rf LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp/webapps/work/ # 在同目錄新建三個文件夾domain、server、sbin $ mkdir domain $ mkdir server $ mkdir sbin # 把bin 和lib目錄移動到server下面 $ mv bin/ server/ $ mv lib/ server/ # 把conf目錄移動到domain下面 $ mv conf/ domain/ # 安裝tomcat native 開啟aio # 進入server/bin目錄下安裝tomcat native 與apr連起來 開啟tomcat aio模式 $ cd server/bin # 解壓 tomcat native $ tar -zxvf tomcat-native.tar.gz # 進入安裝tomcat native目錄 $ cd tomcat-native-1.1.33-src $ cd jni $ cd native # 執行命令 $ ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.7.0_76 $ make $ make install # 創建項目目錄(這里項目名稱示例CENTER) $ cd /data/zhnx/domain $ mkdir center # 把conf目錄移動到項目下 $ mv conf/ center/
拷貝並修改腳本啟動參數
- 到目錄/data/zhnx/sbin 下新建三個腳本,這里與center項目為例:startcenter.sh、stopcenter.sh和super.sh
$ cd /data/zhnx/sbin
# 腳本一 $ vi startcenter.sh #!/bin/bash # 下面需要修改的地方 # 1、HOME=/data/zhnx根據自己建的目錄 export HOME=/data/zhnx export DOMAIN_HOME=${HOME}/domain export LOG_HOME=${HOME}/logs export TOMCAT_HOME=${HOME}/server #Variable settings begin # 下面需要修改的地方 # 1、export projectName=center 服務名稱,即war包名稱 # 2、export httpPort=7001 啟動接收請求端口端口 # 3、export serverPort=8001 tomcat啟動的本地端口 export projectName=center export httpPort=7001 export serverPort=8001 export minMsMem=3200m export maxMsMem=3200m export ssMem=300k export mnMem=1100m export survivorRatior=2 export minPermSize=250m export maxPermSize=300m export threshold=20 export fraction=60 export pageSize=128m export warFile=${HOME}/center_webapps # 服務名加webapps war包地址 export logFile=${LOG_HOME}/${projectName}/catalina.$(date +'%Y-%m-%d').out export pidFile=${LOG_HOME}/${projectName}.pid export LD_LIBRARY_PATH=/usr/local/apr/lib export heapDumpPath=${DOMAIN_HOME}/${projectName}/heapDump #Variable settings end #JVM args settings begin # 下面需要修改的地方: # 1、Dtjtag=center服務名稱 CATALINA_OPTS="-server -Dtjtag=center -Dtomcat.server.port=${serverPort} -Dtomcat.http.port=${httpPort} -Dtomcat.deploy.home=${warFile}" CATALINA_OPTS="${CATALINA_OPTS} -Xms${minMsMem} -Xmx${maxMsMem} -Xss${ssMem} -Xmn${mnMem} -XX:SurvivorRatio=${survivorRatior} -XX:PermSize=${minPermSize} -XX:MaxPermSize=${maxPermSize}" CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseCompressedOops -XX:+TieredCompilation -XX:+AggressiveOpts -XX:+UseBiasedLocking" CATALINA_OPTS="${CATALINA_OPTS} -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -Xnoclassgc -XX:MaxTenuringThreshold=${threshold} -XX:CMSInitiatingOccupancyFraction=${fraction} -XX:LargePageSizeInBytes=${pageSize} -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${heapDumpPath}" #JVM args settings end export CATALINA_BASE=${DOMAIN_HOME}/${projectName} export CATALINA_OPTS export CATALINA_OUT="${logFile}" export CATALINA_PID="${pidFile}" export CATALINA_OPTS ${TOMCAT_HOME}/bin/catalina.sh start exit $?
$ cd /data/zhnx/sbin
# 腳本二 $ vi stopcenter.sh #!/bin/bash # 下面需要修改的地方 # 1、HOME=/data/zhnx根據自己建的目錄 # 2、JAVA_HOME=/usr/local/jdk1.7 根據自己JDK的路勁 export HOME=/data/zhnx export JAVA_HOME=/usr/local/jdk1.7 export DOMAIN_HOME=${HOME}/domain export LOG_HOME=${HOME}/logs export TOMCAT_HOME=${HOME}/server export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=${JAVA_HOME}/bin:${PATH} #Variable settings begin # 下面需要修改的地方 # 1、export projectName=center 項目名稱,即war包名稱 # 2、export serverPort=8001 tomcat本地啟動端口,以上面對應 export projectName=center export serverPort=8001 #Variable settings end export JAVA_OPTS="-Dtomcat.server.port=${serverPort}" export CATALINA_PID="${LOG_HOME}/${projectName}.pid" export CATALINA_BASE=${DOMAIN_HOME}/${projectName} ${TOMCAT_HOME}/bin/catalina.sh stop 30 -force exit $?
$ cd /data/zhnx/sbin
# 腳本三 vi super.sh checkProcess(){ pid=`ps -ef|grep ${classname}|grep -v 'grep'|awk '{print $2}'` if [ "X${pid}" != "X" ]; then return 0 else return 1 fi } printStartStatus(){ checkProcess if [ $? -eq 0 ]; then echo "${_moduleName} start sucessful. [OK]" return 0 else echo "${_moduleName} start Failed. [Failed]" return 1 fi } startProcess(){ echo $1 checkProcess if [ $? -eq 0 ]; then echo "${_moduleName} had started." return 0 else ${start} sleep 3 printStartStatus fi } stopProcess(){ echo $1 checkProcess if [ $? -eq 1 ]; then echo "${_moduleName} not running. [FAILED]" else pid=`ps -ef|grep ${classname}|grep -v 'grep'|awk '{print $2}'` if [ "X${pid}" = "X" ]; then echo "${_moduleName} had stop. [OK]" else kill -9 $pid echo "${_moduleName} stop sucessful. [OK]" fi fi } restartProcess(){ stopProcess $1 startProcess $2 } getProcessStatus(){ checkProcess if [ $? -eq 0 ]; then echo "${_moduleName} is running." return 0 else echo "${_moduleName} is not running." return 1 fi } unstall(){ checkProcess if [ $? -eq 0 ]; then pid=`ps -ef|grep ${classname}|grep -v 'grep'|awk '{print $2}'` if [ "X${pid}" != "X" ]; then kill -9 $pid fi fi ${remove} } commandError(){ echo "" echo "ERROR:UNKNOWN COMMAND:\"$_command\" " exit 1 }
- 到目錄/etc/rc.d/init.d/下新建一個腳本,這里與center項目為例:center
$ cd /etc/rc.d/init.d/
# 腳本四 $ vi center #!/bin/sh # 下面需要修改的地方 # 1、classname="tjtag=center" center服務名稱 # 2、_moduleName="center" modul名稱 # 3、start="/data/zhnx/sbin/startcenter.sh" 上面新建的腳本 # 4、. /data/zhnx/sbin/super.sh 上面新建的腳本 classname="tjtag=center" _command=$1 _moduleName="center" start="/data/zhnx/sbin/startcenter.sh" . /data/zhnx/sbin/super.sh case $_command in start) startProcess "Starting ${_moduldName}:" ;; stop) stopProcess "Stoping ${_moduldName}:" ;; restart) restartProcess "Stoping ${_moduldName}:" "Starting ${_moduldName}:" ;; status) getProcessStatus ;; *) commandError ;; esac
刪除原始的並替換修改過的SERVER.XML
$ cd /data/zhnx/domain/center/conf $ rm -rf server.xml vi server.xml <?xml version='1.0' encoding='utf-8'?> <Server port="${tomcat.server.port}" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector URIEncoding="UTF-8" minSpareThreads="15" maxSpareThreads="30" enableLookups="false" disableUploadTimeout="true" acceptCount="500" maxThreads="50" maxProcessors="1000" minProcessors="10" useURIValidationHack="false" compression="on" compressionMinSize="512" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" protocol="org.apache.coyote.http11.Http11AprProtocol" port="${tomcat.http.port}" connectionTimeout="20000"/> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="${tomcat.deploy.home}" unpackWARs="true" autoDeploy="false"> <Context path="" docBase="sso" sessionCookiePath="/" sessionCookieDomain=".qasite.com" useHttpOnly="true" crossContext="true" debug="0" reloadable="false"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.10.11:11220" sticky="false" lockingMode="auto" sessionBackupAsync="false" sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory" /> </Context> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
若有自己需要增加的jar就拷進去
$ cd /data/zhnx/server/lib 把jar考進去
項目部署
新建目錄webapp名稱與startcenter.sh里的webapps名稱一樣
日志名稱與服務名一樣
$ mkdir -p /data/zhnx/center_webapps
$ mkdir -p /data/zhnx/logs/center
center.war 部署至 center_webapps
部署時需將對應webapps目錄下的文件及文件夾清空;
然后把項目war包拷入對應webapps目錄下
啟動服務
service center start
