Tomcat 調優的技巧 (轉)

描述

最近在補充本身的短板,恰好整理到Tomcat調優這塊,基本上面試必問,因而就花了點時間去搜集一下tomcat調優
都調了些什麼,先記錄一下調優手段,更多詳細的原理和實現之後用到時候再來補充記錄,下面就來介紹一下,
tomcat調優大體分爲兩大類:html

1、tomcat的自身調優

  • 採用動靜分離節約tomcat的性能
  • 調整tomcat的線程池
  • 調整tomcat的鏈接器
  • 修改tomcat的運行模式
  • 禁用AJP鏈接器

2、jvm的調優

  • 調優Jvm內存

tomcat自身調優

採用動靜分離

靜態資源若是讓tomcat處理的話tomcat的性能會被損耗不少,因此咱們通常都是採用:nginx+tomcat實現動靜分離,
讓 Tomcat 只負責 jsp 文件的解析工做,nginx實現靜態資源的訪問。java

調優tomcat的線程池

  • 打開tomcat的serve.xml
  • 配置Executor

參數解釋

  • name
    給執行器(線程池)起一個名字
  • namePrefix
    指定線程池中的每個線程的name前綴
  • maxThreads
    線程池中最大的線程數量
    假設:請求的數量超過了「750」,這將不是意味着將maxThreads屬性值設置爲「750」,它的最好解決方案是使用「Tomcat集羣」。
    也就是說,若是有「1000」請求,兩個Tomcat實例設置「maxThreads= 500」,而不在單Tomcat實例的狀況下設置maxThreads=1000。
  • minSpareThreads
    線程池中容許空閒的線程數量(多餘的線程都殺死)
  • maxIdLeTime
    一個線程空閒多久算是一個空閒線程
    其餘的配置其實閱讀官方文檔是最好的:
    tomcat8的配置文檔

調優tomcat的鏈接器Connector

  • 打開tomcat的serve.xml
  • 配置Connector

參數解釋

  • executor
    指定這個鏈接器所使用的執行器(線程池)
    nginx

  • enableLookups="false"
    關閉dns解析,減小性能損耗
  • minProcessors
    服務器啓動時建立的最少線程數
  • maxProcessors
    最大能夠建立的線程數
  • acceptCount="1000"
    線程池中的線程都被佔用,容許放到隊列中的請求數
  • maxThreads="3000"
    最大線程數
  • minSpareThreads="20"
    最小空閒線程數,這裏是一直會運行的線程
  • 和壓縮有關係的配置
    若是已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不須要 Tomcat 處理了,
    那麼也就不須要配置在 Tomcat 中配置壓縮了
  • 一個完整的配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ##超時時間,毫秒,這裏是20秒 redirectPort="443" maxThreads="3000" ##最大線程數 minSpareThreads="20" ##最小空閒線程數,這裏是一直會運行的線程 acceptCount="1000" ##接收的隊列數 enableLookups="false" ##關閉dns解析,減小性能損耗 server="None" URIEncoding="UTF-8" />

*關於Connector的配置文檔面試

經過修改tomcat的運行模式

BIO

  • Tomcat8如下版本,默認使用的就是BIO(阻塞式IO)模式

對於每個請求都要建立一個線程來進行處理,不適合高併發apache

NIO

  • Tomcat8以上版本,默認使用的就是NIO模式
  • 非阻塞式Io

APR(Apache Portable Runtime)

  • 是Tomcat生產環境運行的首選方式
  • 若是操做系統未安裝apr或者apr路徑未指到Tomcat默承認識別的路徑,
    則apr模式沒法啓動,自動切換啓動nio模式。
    因此必需要安裝apr和native,直接啓動就支持apr
  • apr是從操做系統級別解決異步IO問題,apr的本質就是使用jni(java native interface)
    技術調用操做系統底層的IO接口,因此須要提早安裝所須要的依賴
  • 提高Tomcat對靜態文件的處理性能,固然也能夠採用動靜分離

禁用AJP鏈接器

Apache JServer Protocol
使用Nginx+tomcat的架構,因此用不着AJP協議,因此把AJP鏈接器禁用
tomcat

JVM的調優

tomcat是運行在jvm上的,因此對jvm的調優也是很是有必要的。服務器

調優內存

  • 找到:catalina.sh
    架構

  • 添加的位置
    併發

  • 嘗試的參數設置
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求,less

結尾

  • 這裏只是簡單記錄一下調優都有哪些途徑,更多的是找出思路,具體怎麼調須要咱們根據實際狀況去驗證調整。
  • 推薦書籍:HowTomcatWorks

轉載:www.cnblogs.com/wangsen

相關文章
相關標籤/搜索