jvm運行時數據結構:html
jvm堆數據機構:java
-xms 初始化堆大小 默認物理內存的1/64(<1GB)
-xmx 最大堆大小 默認物理內存的1/4(<1GB),實際中建議不大於4GB
通常建議設置 -xms = -xmx 好處是避免每次在gc後,調整堆的大小,減小系統內存分配開銷node
整個堆大小=年輕代大小+年老代大小+持久代大小python
新生代=1個eden區+2個suivivor區 使用-xmn來設置其大小,默認值大小爲整個堆的3/8,用來存放JVM剛分配的java對象linux
老年代中通過垃圾回收沒有被回收掉的對象被複制到老年代,老年代大小無配置參數web
-xx:permsize :設置持久代大小 通常和-xx:maxpermsize最大持久代大小一致,爲了不gc後內存的開銷
持久代存放class、method元信息,其大小與項目的規模、類、方法的數量有關。通常設置爲128M就足夠了,設置原則是預留30%的空間apache
tomcat安裝部署bootstrap
首先到tomcat和jdk官方下載源碼包vim
[root@linux-node1 ~]$ cd /usr/local/ [root@linux-node1 local]$ ll -rw-r--r-- 1 root root 9532698 Mar 5 21:50 apache-tomcat-8.5.29.tar.gz -rw-r--r-- 1 root root 354635831 Mar 19 13:29 jdk-9.0.4_linux-x64_bin.tar.gz
安裝jdk和tomcattomcat
[root@linux-node1 local]$ tar xf jdk-9.0.4_linux-x64_bin.tar.gz [root@linux-node1 local]$ tar xf apache-tomcat-8.5.29.tar.gz [root@linux-node1 local]$ ln -s /usr/local/jdk-9.0.4 /usr/local/jdk [root@linux-node1 local]$ ln -s /usr/local/apache-tomcat-8.5.29 /usr/local/tomcat
建立管理jdk和tomcat的用戶,並對此用戶授予全部者權限
[root@linux-node1 local]# useradd -u 601 tomcat [root@linux-node1 local]# chown tomcat.tomcat /usr/local/jdk -R [root@linux-node1 local]# chown tomcat.tomcat /usr/local/tomcat -R
建立jdk和tomcat的系統環境變量
[root@linux-node1 local]# vim /etc/profile.d/tomcat.sh export JAVA_HOME=/usr/local/jdk export TOMCAT_HOME=/usr/local/tomcat export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/to ols.jar
加載這個腳本,使tomcat和jdk的環境變量生效 [root@linux-node1 ~]# source /etc/profile.d/tomcat.sh
爲了安全起見,切換到tomcat用戶環境,使用tomcat用戶來啓動tomcat
[root@linux-node1 local]# su - tomcat [tomcat@linux-node1 ~]$ catalina.sh start [tomcat@linux-node1 ~]$ ps -ef|grep java |grep tomcat tomcat 16777 1 70 16:19 pts/1 00:00:04 /usr/local/jdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomca -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start #固然也能夠取tomcat進程的pid號,這樣就能夠建立一個管理tomcat的腳本 [tomcat@linux-node1 ~]$ ps -ef|grep java |grep tomcat|grep -v grep |awk '{print $2}' 16777 [tomcat@linux-node1 ~]$ netstat -lntup tcp6 0 0 127.0.0.1:8005 :::* LISTEN 16777/java tcp6 0 0 :::8009 :::* LISTEN 16777/java tcp6 0 0 :::8080 :::* LISTEN 16777/java
可以正常啓動tomcat後,就能夠建立一個腳原本管理tomcat了,實現經過腳原本啓動tomcat或關閉tomcat再或重啓tomcat等。
經過設置catalina.sh來配置遠程監控jvm
vim /usr/local/tomcat/bin/catalina.sh CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=22222 -Djava.rmi.server.hostname=192.168.182.170"
tomcat 在生產環境下安全規範
一、telnet端口的修改<Server port="8005" shutdown="SHUTDOWN"> 將8005端口修改或shutdown指令字符創作修改好比shutdown="dangji"
若是這個端口沒有修改,能夠經過這個端口telnet上來關閉tomcat服務:telnet 192.168.182.170 8005 進入後輸入SHUTDOWN便可關閉tomcat服務。
二、ajp鏈接端口的保護:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改默認端口8009爲不易衝突的大於1024端口
三、禁用管理端
刪除默認安裝目錄下的conf/tomcat-users.xml文件,重啓tomcat後將會自動生成新的文件
刪除默認安裝目錄下的/webapps下默認全部的目錄和文件
將tomcat應用根目錄配置爲tomcat安裝目錄之外的目錄。例如:在Host標籤下添加
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/usr/local/tomcat/webroot" debug="
0" reloadable="false" crossContext="true">
</Context>
四、文件列表的訪問控制
conf/web.xml文件中的default部分listings的配置必須爲false,默認是false。表示禁止將文件展現出來
五、版本信息隱藏
修改web.xml重定向40三、404以及500等錯誤指定的錯誤頁面,由於這些錯誤頁面上會顯示版本信息,因此要修改錯誤頁面的重定向
六、server header重寫
在HTTP Connector配置中加入server的配置
七、訪問限制
經過配置,限定訪問的ip來源
八、起停腳本的權限收回
去除其餘用戶對tomcat的bin目錄下shutdown.sh、startup.sh、catalina.sh的可執行權限
chmod -R 744 tomcat/bin/*
九、訪問日誌格式的規範
開啓tomcat默認訪問日誌中的Referer和User-Agent記錄
tomcat性能優化:
tomcat線程優化:
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />
maxThreads="600" ///最大線程數
minSpareThreads="100"///初始化時建立的線程數
maxSpareThreads="500"///一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。
acceptCount="700"//指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理
能夠經過命令:java -xx:+PrintFlagsFinal 顯示java所支持的全部的參數及參數對應的默認值
jvm內存調優:
vim /usr/local/tomcat/bin/catalina.sh JSSE_OPTS="-Xmx4000M -Xms4000M -Xmn600M -XX:PermSize=128M -XX:MaxPermSize=128M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log "
配置說明:
參考文章:http://www.open-open.com/lib/view/open1324736648468.html
http://blog.chinaunix.net/uid-743704-id-2681326.html