日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat优化

發(fā)布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.Tomcat內(nèi)存優(yōu)化

  • Tomcat內(nèi)存優(yōu)化主要是對 tomcat 啟動參數(shù)優(yōu)化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設(shè)置 java_OPTS 參數(shù)
  • JAVA_OPTS參數(shù)說明:   
    • -server 啟用jdk 的 server 版   
    • -Xms java虛擬機初始化時的最小內(nèi)存   
    • -Xmx java虛擬機可使用的最大內(nèi)存   
    • -XX: PermSize 內(nèi)存永久保留區(qū)域   
    • -XX:MaxPermSize 內(nèi)存最大永久保留區(qū)域

    3.配置示例: JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’ 說明:其內(nèi)存的配置需要根據(jù)服務(wù)器(或虛擬機)的實際內(nèi)存來配置

    4.重啟tomcat生效


    二.Tomcat并發(fā)優(yōu)化

    1.調(diào)整連接器connector的并發(fā)處理能力:

    • maxThreads :客戶請求最大線程數(shù)   
    • minSpareThreads :Tomcat初始化時創(chuàng)建的 socket 線程數(shù)   
    • maxSpareThreads: Tomcat連接器的最大空閑 socket 線程數(shù)   
    • enableLookups :是否反查域名,取值為: true 或 false 。為了提高處理能力,應設(shè)置為 false   
    • redirectPort: 在需要基于安全通道的場合,把客戶請求轉(zhuǎn)發(fā)到基于SSL 的 redirectPort 端口   
    • acceptAccount: 監(jiān)聽端口隊列最大數(shù),滿了之后客戶請求會被拒絕(不能小于maxSpareThreads )   
    • connectionTimeout: 連接超時   
    • minProcessors: 服務(wù)器創(chuàng)建時的最小處理線程數(shù)   
    • maxProcessors: 服務(wù)器同時最大處理線程數(shù)   
    • URIEncoding: URL統(tǒng)一編碼 其中和最大連接數(shù)相關(guān)的參數(shù)為maxProcessors 和 acceptCount 。如果要加大并發(fā)連接數(shù),應同時加大這兩個參數(shù)。

    2.壓縮優(yōu)化及參數(shù)

    • compression="on" 打開壓縮功能
    • compressionMinSize="2048"啟用壓縮的輸出內(nèi)容大小,默認為2KB
    • noCompressionUserAgents="gozilla,traviata" 對于以下的瀏覽器,不啟用壓縮
    • compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮 Tomcat 的壓縮是在客戶端請求服務(wù)器對應資源后,從服務(wù)器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。相對于普通的瀏覽過程 HTML、CSS、Javascript和Text,它可以節(jié)省40% 左右的流量。更為重要的是,它可以對動態(tài)生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等輸出的網(wǎng)頁也能進行壓縮,壓縮效率也很高。但是, 壓縮會增加 Tomcat 的負擔,因此最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,將壓縮的任務(wù)交由 Nginx/Apache 去做。

    三、Tomcat緩存優(yōu)化

    1、tomcat的maxThreads、acceptCount(最大線程數(shù)、最大排隊數(shù)) 說明:

    • maxThreads:tomcat起動的最大線程數(shù),即同時處理的任務(wù)個數(shù),默認值為200
    • acceptCount:當tomcat起動的線程數(shù)達到最大時,接受排隊的請求個數(shù),默認值為100

    這兩個值如何起作用,請看下面三種情況

    情況1:接受一個請求,此時tomcat起動的線程數(shù)沒有到達maxThreads,tomcat會起動一個線程來處理此請求。

    情況2:接受一個請求,此時tomcat起動的線程數(shù)已經(jīng)到達maxThreads,tomcat會把此請求放入等待隊列,等待空閑線程。

    情況3:接受一個請求,此時tomcat起動的線程數(shù)已經(jīng)到達maxThreads,等待隊列中的請求個數(shù)也達到了acceptCount,此時tomcat會直接拒絕此次請求,返回connection refused

    maxThreads如何配置

    一般的服務(wù)器操作都包括量方面:1計算(主要消耗cpu),2等待(io、數(shù)據(jù)庫等)

    第一種極端情況,如果我們的操作是純粹的計算,那么系統(tǒng)響應時間的主要限制就是cpu的運算能力,此時maxThreads應該盡量設(shè)的小,降低同一時間內(nèi)爭搶cpu的線程個數(shù),可以提高計算效率,提高系統(tǒng)的整體處理能力。

    第二種極端情況,如果我們的操作純粹是IO或者數(shù)據(jù)庫,那么響應時間的主要限制就變?yōu)榈却獠抠Y源,此時maxThreads應該盡量設(shè)的大,這樣才能提高同時處理請求的個數(shù),從而提高系統(tǒng)整體的處理能力。此情況下因為tomcat同時處理的請求量會比較大,所以需要關(guān)注一下tomcat的虛擬機內(nèi)存設(shè)置和linux的open file限制。

    我在測試時遇到一個問題,maxThreads我設(shè)置的比較大比如3000,當服務(wù)的線程數(shù)大到一定程度時,一般是2000出頭,單次請求的響應時間就會急劇的增加,

    百思不得其解這是為什么,四處尋求答案無果,最后我總結(jié)的原因可能是cpu在線程切換時消耗的時間隨著線程數(shù)量的增加越來越大,

    cpu把大多數(shù)時間都用來在這2000多個線程直接切換上了,當然cpu就沒有時間來處理我們的程序了。

    以前一直簡單的認為多線程=高效率。。其實多線程本身并不能提高cpu效率,線程過多反而會降低cpu效率。

    當cpu核心數(shù)<線程數(shù)時,cpu就需要在多個線程直接來回切換,以保證每個線程都會獲得cpu時間,即通常我們說的并發(fā)執(zhí)行。

    所以maxThreads的配置絕對不是越大越好。

    現(xiàn)實應用中,我們的操作都會包含以上兩種類型(計算、等待),所以maxThreads的配置并沒有一個最優(yōu)值,一定要根據(jù)具體情況來配置。

    最好的做法是:在不斷測試的基礎(chǔ)上,不斷調(diào)整、優(yōu)化,才能得到最合理的配置。

    acceptCount的配置,我一般是設(shè)置的跟maxThreads一樣大,這個值應該是主要根據(jù)應用的訪問峰值與平均值來權(quán)衡配置的。

    如果設(shè)的較小,可以保證接受的請求較快相應,但是超出的請求可能就直接被拒絕

    如果設(shè)的較大,可能就會出現(xiàn)大量的請求超時的情況,因為我們系統(tǒng)的處理能力是一定的。

    maxThreads 配置要結(jié)合 JVM -Xmx 參數(shù)調(diào)整,也就是要考慮內(nèi)存開銷。


    四、tomcat的協(xié)議類型優(yōu)化:

    1、關(guān)閉AJP端口 AJP是為 Tomcat 與 HTTP 服務(wù)器之間通信而定制的協(xié)議,能提供較高的通信速度和效率。如果tomcat前端放的是apache的時候,會使用到AJP這個連接器。若tomcat未與apache配合使用,因此不使用此連接器,因此需要注銷掉該連接器。 <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

    2、bio模式: 默認的模式,性能非常低下,沒有經(jīng)過任何優(yōu)化處理和支持.

    3、nio模式:

    01、nio(new I/O),是Java SE 1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運行性能。

    02、如何啟動此模式: 修改server.xml里的Connector節(jié)點,修改protocol為org.apache.coyote.http11.Http11NioProtocol

    4、apr模式: apr是從操作系統(tǒng)級別解決異步IO問題,大幅度提高服務(wù)器的并發(fā)處理性能,也是Tomcat生產(chǎn)環(huán)境運行的首選方式 目前Tomcat 8.x默認情況下全部是運行在nio模式下,而apr的本質(zhì)就是使用jni技術(shù)調(diào)用操作系統(tǒng)底層的IO接口,所以需要提前安裝所需要的依賴,首先是需要安裝openssl和apr,命令如下:

    yum -y install openssl-devel yum -y install apr-devel

    安裝之后,去tomcat官網(wǎng)下載native組件,native可以看成是tomcat和apr交互的中間環(huán)節(jié)

    解壓之后上傳至服務(wù)器執(zhí)行解壓并安裝:

    tar -xvzf tomcat-native-1.2.10-src.tar.gz -C /usr/local cd /usr/local/tomcat-native-1.2.10-src/native/ ./configure 編譯安裝

    然后進入tomcat安裝目錄,編輯配置文件:conf/server.xml,將默認的protocol="HTTP/1.1"修改為protocol="org.apache.coyote.http11.Http11AprProtocol"

    ?

    apr引入方法:

    配置tomcat安裝目錄下:bin/catalina.sh文件引入apr,推薦這種方式:

    所示在原有變量JAVA_OPTS后面追加對應的配置即可,添加一行新的就可以:JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"

    ?

    然后保存并退出


    5、系統(tǒng)參數(shù)優(yōu)化: 優(yōu)化網(wǎng)卡驅(qū)動可以有效提升性能,這個對于集群環(huán)境工作的時候尤為重要。由于我們采用了linux服務(wù)器,所以優(yōu)化內(nèi)核參數(shù)也是一個非常重要的工作。給一個參考的優(yōu)化參數(shù): 01、 修改/etc/sysctl.cnf文件,在最后追加如下內(nèi)容: net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 65536

    02、 保存退出,執(zhí)行sysctl -p生效


    五、tomcat的安全配置:

    1、當Tomcat完成安裝后你首先要做的事情如下:

    首次安裝完成后立即刪除webapps下面的所有代碼 rm -rf /srv/apache-tomcat/webapps/* 注釋或刪除 tomcat-users.xml 所有用戶權(quán)限,看上去如下:

    #cat conf/tomcat-users.xml<?xml version='1.0' encoding='utf-8'?> <tomcat-users> </tomcat-users>

    2、隱藏tomcat版本

    01.首先找到這個jar包,$TOMCAT_HOME/lib/catalina.jar

    02.解壓catalina.jar之后按照路徑\org\apache\catalina\util\ServerInfo.properties找到文件

    03.打開ServerInfo.properties文件修改如下:把server.number、server.built置空 server.info=Apache Tomcat server.number= server.built=

    04.重新打成jar包,重啟tomcat。

    3、隱藏tomcat 的服務(wù)類型 conf/server.xml文件中,為connector元素添加server=" ",注意不是空字符串,是空格組成的長度為1的字符串,或者輸入其他的服務(wù)類型,這時候,在response header中就沒有server的信息啦!

    4、應用程序安全 關(guān)閉war自動部署 unpackWARs="false" autoDeploy="false"。防止被植入木馬等惡意程序

    5、修改服務(wù)監(jiān)聽端口 一般公司的 Tomcat 都是放在內(nèi)網(wǎng)的,因此我們針對 Tomcat 服務(wù)的監(jiān)聽地址都是內(nèi)網(wǎng)地址。 修改實例:

    <Connector port="8080" address="172.16.100.1" />

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Tomcat优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。