免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
程序員必須練就的「性能調(diào)優(yōu)」組合拳【2】

性能調(diào)優(yōu)系列前序文章索引:

  • 程序員必須掌握的性能調(diào)優(yōu):老兵哥結(jié)合個(gè)人經(jīng)歷解釋了程序員往架構(gòu)師方向發(fā)展時(shí)為什么要跨越性能調(diào)優(yōu)這一關(guān),以及介紹了從 X、Y、Z 三個(gè)維度優(yōu)化性能的思路。

  • 從  X  維度優(yōu)化系統(tǒng)的性能:老兵哥分享了從 X 維度優(yōu)化系統(tǒng)性能的思路,包括讓客戶端分計(jì)算存儲(chǔ)任務(wù)、優(yōu)化交互設(shè)計(jì)等,主要是作為引子拓寬我們性能調(diào)優(yōu)的思路。

程序員在轉(zhuǎn)型架構(gòu)師的過程中需要建立流程化、結(jié)構(gòu)化、系統(tǒng)化的思維方式,而性能調(diào)優(yōu)是非常難得的契機(jī),它既給了我們壓力,也給了我們動(dòng)力,跨越它就是突破自己的過程。

  • X 維度,即業(yè)務(wù)維度,技術(shù)始終是服務(wù)業(yè)務(wù)的,任何技術(shù)問題的原點(diǎn)就是業(yè)務(wù)需求。在啟動(dòng)技術(shù)層面的性能優(yōu)化之前,我們有必要先審視一下業(yè)務(wù)流程是否合理,交互設(shè)計(jì)上有沒有可以優(yōu)化的空間等。

  • Y 維度,待業(yè)務(wù)維度優(yōu)化完畢,接下來就是審視技術(shù)在實(shí)現(xiàn)當(dāng)前業(yè)務(wù)流程或交互設(shè)計(jì)的全鏈路上有沒有可優(yōu)化的地方,即 HTTP 請求處理全流程,從瀏覽器到應(yīng)用容器,再到 Spring、Hibernate、數(shù)據(jù)庫等。

  • Z 維度,除了沿著 HTTP 請求的橫向鏈路,我們還要審視支持應(yīng)用系統(tǒng)的縱向技術(shù)棧,從上到下包括 JVM、操作系統(tǒng)和硬件等,這是整套應(yīng)用系統(tǒng)運(yùn)行的環(huán)境,許多性能問題都跟運(yùn)行環(huán)境存在關(guān)系。

Y 維度,就是從業(yè)務(wù) HTTP 請求的橫向處理流程來看,HTTP 請求會(huì)穿越網(wǎng)絡(luò)、計(jì)算機(jī)、應(yīng)用容器(Tomcat)、Spring、ORM(Hibernate)、數(shù)據(jù)庫等節(jié)點(diǎn),在這個(gè)流程中每個(gè)節(jié)點(diǎn)都有許多可以可優(yōu)化的地方,今天老兵哥先談?wù)勅绾瓮ㄟ^優(yōu)化應(yīng)用容器(Tomcat)來優(yōu)化系統(tǒng)性能。

建議在閱讀本文內(nèi)容前,先參考下面這個(gè)系列的文章了解 Web 應(yīng)用是怎樣處理 HTTP 請求的:

2. 應(yīng)用容器 Tomcat

2.1 啟動(dòng)參數(shù)

操作系統(tǒng)選型,盡可能選擇 64 位操作系統(tǒng),在 64 位系統(tǒng)上 JVM 內(nèi)存最高可以設(shè)置為 3800MB 左右,在 32 位系統(tǒng)上 JVM 內(nèi)存最高可以設(shè)置為 1500MB 左右。另外,我們可以根據(jù)系統(tǒng)物理內(nèi)存大小合理設(shè)置下列五個(gè)啟動(dòng)參數(shù)(在文件 catalina.sh、catalina.bat 中):

-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m

通常,參數(shù)取值符合規(guī)則:-Xms=-Xmx,-XX:PermSize=-XX:MaxPermSize。上述參數(shù)經(jīng)過驗(yàn)證,可以穩(wěn)定運(yùn)行在各種操作系統(tǒng)平臺(tái)和 JDK 版本上,通過調(diào)參盡可能地壓榨服務(wù)器性能。具體場景下的參數(shù)取值需要具體分析,基本原則就是不要超過空閑物理內(nèi)存的 80% 即可。如果沒有特殊理由,不要設(shè)置上述五個(gè)參數(shù)之外的 JVM 參數(shù),一者無法保證操作系統(tǒng)平臺(tái)的可移植性,二者過度干涉內(nèi)存管理會(huì)導(dǎo)致無法預(yù)料的后果。

非服務(wù)方式啟動(dòng)的 TOMCAT 調(diào)參方式如下:

  • 在 Linux/Unix 系統(tǒng)上,修改 tomcat_home/bin/catalina.sh,添加以下內(nèi)容:

JAVA_HOME=/export/home/jdk1.6.0_16
JAVA_OPTS="-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m -Dcom.sun.management.jmxremote"
  • 在 Windows 系統(tǒng)上,修改 tomcat_home/bin/catalina.bat,添加以下內(nèi)容:

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

  兩者區(qū)別:Linux/Unix 不需要 set,但有”“;Windows 需要set,但不能有”“。服務(wù)方式啟動(dòng)的 TOMCAT 調(diào)參方式如下,僅限于 Windows 系統(tǒng):

  • 在 JAVA 選項(xiàng)卡中,設(shè)置 JAVA OPTIONS,添加以下三個(gè)參數(shù),每行一個(gè),不能并列:

-XX:PermSize=256m
-XX:MaxPermSize=256m
-Dcom.sun.management.jmxremote  
  • 設(shè)置 Initial memory pool 為 1000MB。

  • 設(shè)置 Maximum menory pool 為 1000MB。

  • 不要設(shè)置 thread stack size。


2.2 使用 NIO 的 http1.1 超文本傳輸協(xié)議

Java 的 IO 操作集中在 java.io 這個(gè)包當(dāng)中,基于阻塞 API(即 BIO,Block IO)。對許多應(yīng)用來說,這樣的 API 使用很方便,但某些對性能要求較高的應(yīng)用,尤其是服務(wù)器端應(yīng)用,往往需要一個(gè)更高效的方式來處理 IO。從 JDK1.4 起,NIO API 作為一個(gè)基于緩沖區(qū),并能提供非阻塞 IO 操作的 API(即 NIO,non-blocking IO)被引入。BIO 與 NIO 之間最為重要的不同,就是采用 BIO 往往要引入多線程,每個(gè)連接分配一個(gè)單獨(dú)的線程;NIO 是使用單線程或者只使用少量線程,所有連接共用一個(gè)線程。具體更改方法如下:

  • 打開 Tomcat 的配置文件:$TOMCAT_HOME/conf/server.xml

  • 找到:<Connector port="8080" protocol="http1.1" ...

  • 改為:<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"...

2.3 調(diào)整線程數(shù)

Tomcat 可以采用線程池來提升響應(yīng)速度,默認(rèn)創(chuàng)建 5 個(gè)線程,最大線程數(shù)是 200。如果業(yè)務(wù)并發(fā)量較大,則可以對下列幾個(gè)參數(shù)做些調(diào)整,最大線程數(shù)可以用“同時(shí)在線人數(shù) * 用戶每秒操作次數(shù) * 平均操作時(shí)間”公式計(jì)算:

  • maxThreads:Tomcat 可創(chuàng)建的最大線程數(shù)。

  • acceptCount:如果當(dāng)前可用線程數(shù)為 0,則將請求放入處理隊(duì)列中。這個(gè)值限定了請求隊(duì)列的大小,超過這個(gè)數(shù)值的請求將不予處理。

  • connectionTimeout:網(wǎng)絡(luò)連接超時(shí)時(shí)間,單位毫秒。

  • minSpareThreads:如果當(dāng)前沒有空閑線程,且沒有超過 maxThreads,一次性創(chuàng)建的空閑線程數(shù)量。Tomcat 初始化時(shí)創(chuàng)建的線程數(shù)量也由此值設(shè)置。

  • maxSpareThreads:一旦創(chuàng)建的線程超過此數(shù)值,Tomcat會(huì)關(guān)閉不再需要的線程。

2.4 使用 APR 來增強(qiáng)性能

Tomcat 可以采用 APR(Apache Portable Runtime)提供超強(qiáng)的可伸縮性和性能,更好地集成本地服務(wù)器技術(shù)。APR 是一個(gè)高可移植庫,它是 Apache HTTP Server 2.x 的核心。APR 有很多用途,包括訪問高級 IO 功能(例如:sendfile、epoll、open SSL 等)、OS 級別的功能(隨機(jī)數(shù)生成、系統(tǒng)狀態(tài)等)、本地進(jìn)程管理(共享內(nèi)存、NT 管道、UNIX socket 等),這些功能使 Tomcat 作為 WEB 應(yīng)用服務(wù)器,能更好地與其它本地 Web 技術(shù)集成,讓 Tomcat 也可以擔(dān)當(dāng)更高性能的前端 Web 應(yīng)用服務(wù)器,而不是僅僅是后端 Java EE 應(yīng)用服務(wù)器。APR 的具體安裝步驟如下(下載地址:http://apr.apache.org):

  • 安裝 apr 及 apr-util:

> 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
  • 安裝 tomcat-native.tar.gz,此文件在目錄 $TOMCAT_HOME/bin 下:

> tar zxvf tomcat-native.tar.gz
> cd tomcat-native-1.1.16-src/jni/native
> ./configure —with-apr=/usr/lib/apr
> make
> make install
  • 在 Tomcat 的啟動(dòng)文件($TOMCAt_HOME/bin/catalina.sh)中加入環(huán)境變量:

CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
  • 或在操作系統(tǒng)的環(huán)境變量(/etc/profile)中添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

重新啟動(dòng)計(jì)算機(jī)或使用命令 source /etc/profile 使其即時(shí)生效。
查看啟動(dòng)日志($TOMCAT_HOME/logs/catalina…….log),如出現(xiàn)如下信息表示APR啟動(dòng)成功:

啟動(dòng)時(shí)發(fā)現(xiàn)日志中有:

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
停止時(shí)發(fā)現(xiàn)日志中有:

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服務(wù)器處理靜態(tài)內(nèi)容

作為一個(gè) Jsp/Servlet 容器,Tomcat 本身對靜態(tài) HTML 文件的處理速度要遠(yuǎn)遜于 Apache 等 Web 服務(wù)器。通過與此類 Web 服務(wù)器集成,Tomcat 僅僅處理動(dòng)態(tài)資源請求,靜態(tài)資源請求則交給 Web 服務(wù)器處理,這樣可以顯著地降低系統(tǒng)負(fù)載,從而提高整體響應(yīng)的速度。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)
對tomcat來說,每一個(gè)進(jìn)來的請求(request)都需要一個(gè)線程,直到該請求結(jié)束。
tomcat7.0性能優(yōu)化
tomcat配置及優(yōu)化 | Linux運(yùn)維筆記
4、單機(jī)運(yùn)行環(huán)境搭建之 --CentOS優(yōu)化Tomcat7
Java應(yīng)用服務(wù)器:關(guān)于Web服務(wù)器Tomcat及其面試中的問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服