tomcat優化

Tomcat優化

爲什麼要進行tomcat優化

​        
   隨着電商的發展,高併發的問題已經愈來愈嚴重,在高併發的狀況,無時無刻不考驗着服務器性能的優化,高可用也成爲了一個開發者所必備的知識點,做爲一個程序的開發者,性能的優化一般有三大塊 一、服務器優化 二、數據庫優化 三、JVM優化,那麼接下來我們來研究研究tomcat的優化內容java

tomcat的可視化視圖說明和優化介紹

   tomcat優化分爲三塊: 1. JVM參數優化  2.JVM高併發優化  3.JVM啓動優化
   1.當咱們在在linux環境下啓動了tomcat,在屏幕右上角有一個server status,咱們須要在conf/ tomcat-users.xml 下設置登錄的用戶
   <role rolename="manager"/>
   <role rolename="manager-gui"/>
   <role rolename="admin"/>
   <role rolename="admin-gui"/>
   <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>linux

   該信息賦予了tomcat的用戶權限,以及用戶名,密碼
   登錄完畢 ,能夠看到JVM佔有狀況(Free memory: 51.70 MB Total memory: 95.75 MB Max memory: 419.50 MB)能夠發現此時JVM所使用到的內容是linux虛擬機中的最大佔有內存1/4 ,年輕代,年老代,永久帶內存空間,爲了讓性能更加優越,除了能夠進行tomcat自身優化,還能夠進行在tomcat上進行JVM的調優,和當前tomcat的啓動模式        web

tomcat優化一 catalina文件優化&&JVM優化

   在tomcat的catalina.sh文件下數據庫

  

   export JAVA_OPTS="-server -Xms1600M -Xmx1600M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
​    apache

參數分析

   -server: jdk的server版
   只要你的tomcat運行在生產環境中的,這個參數必須添加
   由於tomcat默認是以一種叫java -client 的模式來運行的,server即意味着你的tomcat是以真實的production的模式在運行的,這也意味着你的tomcat 會擁有更大,更高的併發處理能力,以及更強更敏捷的JVM垃圾回收機制,能夠得到更多的負載與吞吐量tomcat

   -Xms -Xmx :初始堆大小,和最大堆大小
   在實際生產過程當中JVM的堆內存必定要一樣大,若是在一個區間,在最小內存時存在內存不足,此時觸發GC,但此時若內存忽然變大,GC將變得沒有意義,因此在實際生產過程當中須要不能將堆內存設置成空間值(默認是堆內存小於40%時,JVM將增大堆到-Xmx最大限制,空餘堆大於70%時,會減小至-xms最小限制)服務器

   -Xss512k 調整棧大小,最好不要超過1M 網絡

   AggressiveOpts:從單詞上看是積極,生猛,將最新版的JDK優化後的新特性自動注入併發

   UseBiasedLocking:啓動了優化的線程鎖,對於高併發訪問很重要,太多請求忙不過來時,它就自動優化,對於各自長短不一的請求,排隊,會自動進行優化
​         
   DisableExplicitGC:關閉明顯的GC操做,避免內存的大起大落,忽略手動調用GC,使System.gc() 成爲一個空調用 less

   MaxTenuringThreshold: 設置新生代存活的次數  
   若年老代對象過多,能夠將這個年齡設置爲0 ,但一般不建議

   -Djava.awt.headless=true:這個參數都是放在最後的,咱們在J2EE工程中使用一些圖標工具如:jfreechart,在web網頁輸出GIF、JPG流
   在window環境下不會有問題,但在生產環境下可能會出現不顯示,此時這個配置能夠解決這個參數

tomcat優化二:啓動模式優化  conf/server.xml

   在server.xml中除了能修改端口號和編碼集之外,還能進行一項很是重要的修改,啓動模式!

   1.bio 默認的模式,性能很是低下,沒有通過任何優化處理和支持.
   2.nio nio(new I/O),是Java SE 1.4及後續版本提供的一種新的I/O操做方式(即java.nio包及其子包)。Java nio是一個基於緩衝區、並能提供非阻塞I/O操做的Java API,所以nio也被當作是non-blocking I/O的縮寫。它擁有比傳統I/O操做(bio)更好的併發運行性能。
   3.apr 安裝起來最困難,可是從操做系統級別來解決異步的IO問題,大幅度的提升性能.

   <Connector port="8080" protocol="HTTP/1.1"
​                    connectionTimeout="20000"
​                    redirectPort="8443" />
​    
   優化配置1:標準版(親測有效)
   <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
   maxThreads="600" 

   minSpareThreads="100"
   maxSpareThreads="500"

   acceptCount="700"

   connectionTimeout="20000"
   redirectPort="8843"/>

   maxThreads:支持併發訪問線程
   minSpareThreads:最小備用線程,初始化默認是10
   maxSpareThreads:最大備用線程
   URIEncoding:編碼集
   enableLookups:當咱們經過調用request.getRemoteHost()進行DNS查詢時,指望返回客戶實際主機名,將此屬性設置爲true ,但一般設置爲false,節約性能

   disableUploadTimeout disableUploadTimeout = true
   是否須要對tomcat容器單獨的設置上傳時間

   connectionTimeout:網絡連接超時,單位毫秒,設置爲-1表示用戶超時

   acceptCount:當線程達到了maxThreads後,後續將請求放置到一個等待隊列中,這個acceptCount是這個隊列的大小,若這個隊列也滿了,就直接refuse connection ,默認是100

   maxThreads :同時處理線程的能力,默認200 ,建議600-800
   minProcessors:在java中線程是程序運行時的路徑,是在一個程序中與其餘控制線程無關的,可以獨立運行的代碼塊,使空閒時間最低,充分利用cpu資源

總結:

相信經過本次學習,同窗們對於tomcat已經有了必定的瞭解,謝謝各位

相關文章
相關標籤/搜索