Tomcat 調優的技巧 (轉)


描述

最近在補充自己的短板,剛好整理到Tomcat調優這塊,基本上面試必問,於是就花了點時間去搜集一下tomcat調優
都調了些什么,先記錄一下調優手段,更多詳細的原理和實現以后用到時候再來補充記錄,下面就來介紹一下,
tomcat調優大致分為兩大類:

一、tomcat的自身調優

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

二、jvm的調優

  • 調優Jvm內存

tomcat自身調優

采用動靜分離

靜態資源如果讓tomcat處理的話tomcat的性能會被損耗很多,所以我們一般都是采用:nginx+tomcat實現動靜分離,
讓 Tomcat 只負責 jsp 文件的解析工作,nginx實現靜態資源的訪問。

調優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
    指定這個連接器所使用的執行器(線程池)

  • 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)模式

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

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連接器禁用

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"

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

結尾

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

轉載:www.cnblogs.com/wangsen


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM