性能調優系列前序文章索引:html
程序員在轉型架構師的過程當中須要創建流程化、結構化、系統化的思惟方式,而性能調優是很是可貴的契機,它既給了咱們壓力,也給了咱們動力,跨越它就是突破本身的過程。前端
Y 維度,就是從業務 HTTP 請求的橫向處理流程來看,HTTP 請求會穿越網絡、計算機、應用容器(Tomcat)、Spring、ORM(Hibernate)、數據庫等節點,在這個流程中每一個節點都有許多能夠可優化的地方,今天老兵哥先談談如何經過優化應用容器(Tomcat)來優化系統性能。java
建議在閱讀本文內容前,先參考下面這個系列的文章瞭解 Web 應用是怎樣處理 HTTP 請求的:程序員
2. 應用容器 Tomcat數據庫
2.1 啓動參數apache
操做系統選型,儘量選擇 64 位操做系統,在 64 位系統上 JVM 內存最高能夠設置爲 3800MB 左右,在 32 位系統上 JVM 內存最高能夠設置爲 1500MB 左右。另外,咱們能夠根據系統物理內存大小合理設置下列五個啓動參數(在文件 catalina.sh、catalina.bat 中):後端
-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m
一般,參數取值符合規則:-Xms=-Xmx,-XX:PermSize=-XX:MaxPermSize。上述參數通過驗證,能夠穩定運行在各類操做系統平臺和 JDK 版本上,經過調參儘量地壓榨服務器性能。具體場景下的參數取值須要具體分析,基本原則就是不要超過空閒物理內存的 80% 便可。若是沒有特殊理由,不要設置上述五個參數以外的 JVM 參數,一者沒法保證操做系統平臺的可移植性,兩者過分干涉內存管理會致使沒法預料的後果。瀏覽器
非服務方式啓動的 TOMCAT 調參方式以下:tomcat
JAVA_HOME=/export/home/jdk1.6.0_16 JAVA_OPTS="-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m -Dcom.sun.management.jmxremote"
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16 set JAVA_OPTS=-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m -Dcom.sun.management.jmxremote
二者區別:Linux/Unix 不須要 set,但有」「;Windows 須要set,但不能有」「。服務方式啓動的 TOMCAT 調參方式以下,僅限於 Windows 系統:性能優化
-XX:PermSize=256m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote
2.2 使用 NIO 的 http1.1 超文本傳輸協議
Java 的 IO 操做集中在 java.io 這個包當中,基於阻塞 API(即 BIO,Block IO)。對許多應用來講,這樣的 API 使用很方便,但某些對性能要求較高的應用,尤爲是服務器端應用,每每須要一個更高效的方式來處理 IO。從 JDK1.4 起,NIO API 做爲一個基於緩衝區,並能提供非阻塞 IO 操做的 API(即 NIO,non-blocking IO)被引入。BIO 與 NIO 之間最爲重要的不一樣,就是採用 BIO 每每要引入多線程,每一個鏈接分配一個單獨的線程;NIO 是使用單線程或者只使用少許線程,全部鏈接共用一個線程。具體更改方法以下:
2.3 調整線程數
Tomcat 能夠採用線程池來提高響應速度,默認建立 5 個線程,最大線程數是 200。若是業務併發量較大,則能夠對下列幾個參數作些調整,最大線程數能夠用「同時在線人數 * 用戶每秒操做次數 * 平均操做時間」公式計算:
2.4 使用 APR 來加強性能
Tomcat 能夠採用 APR(Apache Portable Runtime)提供超強的可伸縮性和性能,更好地集成本地服務器技術。APR 是一個高可移植庫,它是 Apache HTTP Server 2.x 的核心。APR 有不少用途,包括訪問高級 IO 功能(例如:sendfile、epoll、open SSL 等)、OS 級別的功能(隨機數生成、系統狀態等)、本地進程管理(共享內存、NT 管道、UNIX socket 等),這些功能使 Tomcat 做爲 WEB 應用服務器,能更好地與其它本地 Web 技術集成,讓 Tomcat 也能夠擔當更高性能的前端 Web 應用服務器,而不是僅僅是後端 Java EE 應用服務器。APR 的具體安裝步驟以下(下載地址:http://apr.apache.org):
> tar zxvf apr-1.3.8.tar.gz > cd apr-1.3.8 > ./configure —prefix=/usr/lib/apr > make > make install > tar zxvf apr-util-1.3.9.tar.gz > cd apr-util-1.3.9 > ./configure —with-apr=/usr/lib/apr > make > make install
> tar zxvf tomcat-native.tar.gz > cd tomcat-native-1.1.16-src/jni/native > ./configure —with-apr=/usr/lib/apr > make > make install
CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
從新啓動計算機或使用命令 source /etc/profile 使其即時生效。
查看啓動日誌($TOMCAT_HOME/logs/catalina…….log),如出現以下信息表示APR啓動成功:
啓動時發現日誌中有: Sep 30, 2019 4:32:55 PM org.apache.coyote.http11.Http11AprProtocol start INFO: Starting Coyote HTTP/1.1 on http-8080 Sep 30, 2019 4:32:55 PM org.apache.coyote.ajp.AjpAprProtocol start INFO: Starting Coyote AJP/1.3 on ajp-8009
中止時發現日誌中有: Sep 30, 2019 4:27:06 PM org.apache.coyote.http11.Http11AprProtocol destroy INFO: Stopping Coyote HTTP/1.1 on http-8080 Sep 30, 2019 4:27:06 PM org.apache.coyote.ajp.AjpAprProtocol destroy INFO: Stopping Coyote AJP/1.3 on ajp-8009
2.5 集成Web服務器處理靜態內容
做爲一個 Jsp/Servlet 容器,Tomcat 自己對靜態 HTML 文件的處理速度要遠遜於 Apache 等 Web 服務器。經過與此類 Web 服務器集成,Tomcat 僅僅處理動態資源請求,靜態資源請求則交給 Web 服務器處理,這樣能夠顯著地下降系統負載,從而提升總體響應的速度。
關注「 IT老兵哥 」,賦能程序人生!堅持原創不易,請小夥伴們不吝點個「 贊 」哦!推薦軟技能文章,請點擊連接:程序員,怎樣打造我的影響力?
近期熱評系列《 程序員必須懂的架構師入門課 》: