gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

Tomcat 8.0的并發優化 – 優化server.xml的配置

Tomcat并發量與其配置息息相關, 一般的機器幾百的并發量足矣, 如果設置太高可能引發各種問題, 內存、網絡等問題也能在高并發下暴露出來, 因此, 配置參數的設置非常重要.

1 Tomcat的3種運行模式

1.1 BIO – 同步阻塞IO模式

BIO, 同步阻塞IO, 性能低, 沒有經過任何優化處理和支持.

服務器實現模式為一個連接一個線程, 即客戶端有連接請求時服務器端就需要啟動一個線程進行處理, 如果這個連接不做任何事情會造成不必要的線程開銷, 當然可以通過 線程池 機制改善.

適用場景: BIO方式適用于連接數比較小且固定的架構, 這種方式對服務器資源要求比較高, 有并發局限, JDK1.4之前的唯一選擇.

1.2 NIO – 同步非阻塞IO模式

是Java SE 1.4及后續版本提供的一種新的IO操作方式(即java.nio包及其子包). Java NIO是一個基于緩沖區、并能提供非阻塞IO操作的Java API, 因此NIO也被看成是non-blocking IO(非阻塞式IO)的縮寫, 它擁有比傳統BIO操作更好的并發性能.

服務器實現模式為一個請求一個線程, 即客戶端發送的連接請求都會注冊到多路復用器上, 多路復用器輪詢到連接有IO請求時才啟動一個線程進行處理.

適用場景: 適用于連接數較多且連接比較時間短(輕操作)的架構, 比如聊天服務器. 這種方式的并發性能局限于應用中, 編程比較復雜.

目前Tomcat 8.x默認運行在NIO模式下.

1.3 APR – 可移植運行時模式

APR(Apache Portable Runtime, Apache可移植運行時), 是Apache HTTP服務器的一個支持庫, 它提供了一組映射到底層操作系統的API, 如果操作系統不支持特定功能, APR庫將提供仿真. 因此開發人員可以使用APR使程序真正跨平臺移植.

此模式的安裝步驟比較繁瑣, 但卻從操作系統層面解決了異步IO的問題, 能大幅度提高應用性能.

APR的本質是使用 JNI 技術調用操作系統底層的IO接口, 所以需要提前安裝必要的依賴, 具體方式后續給出.

2 Tomcat的并發配置(配置Connector)

Tomcat的Connector是其接收HTTP請求的關鍵模塊, 可以通過它來指定IO處理模式, 指定處理該Connector接收到的請求的線程數, 以及其他常用的HTTP策略.

配置路徑: 在 ${TOMCAT_HOME}/conf/server.xml 文件的節點中進行配置.

2.1 使用線程池處理請求

使用線程池, 通過較少的線程資源來處理更多的請求, 從而提高Tomcat的請求處理能力.

前提: 要提前配置至少一個線程池來處理請求, 配置文件為${TOMCAT_HOME}/conf/server.xml.

其中Executor與Connector同級, 多個Connector可以使用同一個線程池來處理請求.

(1) 參考默認連接池配置:
<Executor name=”tomcatThreadPool” namePrefix=”catalina-exec-“
          maxThreads=”150″ minSpareThreads=”4″/>

(2) 自定義線程池示例:
<Executor name=”tomcatThreadPool” namePrefix=”catalina-exec-”
          maxThreads=”200″ minSpareThreads=”10″ maxIdleTime=”600000″
          prestartminSpareThreads=”true” maxQueueSize=”100″  />

(3) 線程池參數說明:

name: 線程池名稱.
namePrefix: 創建的每個線程的名稱前綴, 單獨的線程名稱為 namePrefix + threadNumber.
maxThreads: 線程池中最大并發線程數, 默認值為200, 一般建議設置400~ 800 , 要根據服務器配置和業務需求而定.
minSpareThreads: 最小活躍線程數, 也就是核心線程數, 不會被銷毀, 會一直存在.
prestartminSpareThreads: 是否在啟動程序時就生成minSpareThreads個線程, 默認為false, 即不啟動. 若不設置為true, 則minSpareThreads的設置就不起作用了.
maxIdleTime: 線程最大空閑時間, 超過該時間后, 空閑線程會被銷毀, 默認值為6000, 單位為毫秒.
maxQueueSize: 最大的等待隊列數, 超過則拒絕請求. 默認值為int類型的最大值(Integer.MAX_VALUE), 等同于無限大. 一般不作修改, 避免發生部分請求未能被處理的情況.
threadPriority: 線程池中線程的優先級, 默認值為5, 取值范圍: 1 ~ 10.
className:線程池的實現類, 未指定情況下, 默認實現類為 org.apache.catalina.core.StandardThreadExecutor. 要自定義線程池就需要實現 org.apache.catalina.Executor 接口.

2.2 在Connector中使用線程池

Connector是Tomcat接收請求的入口, 每個Connector都有自己專屬的監聽端口.
  <Connector executor=”tomcatThreadPool”
            port=”8080″ protocol=”HTTP/1.1″
            connectionTimeout=”20000″
            redirectPort=”8443″ />

(1) Connector的參數說明:

redirectPort=”8443″ # 基于SSL的端口, 在需要基于安全通道的場合, 比如當客戶端的請求協議是HTTPS時, 將該請求轉發到此端口.

minSpareThreads=”25″ # Tomcat連接器的最小空閑Socket線程數, 默認值為25. 如果當前沒有空閑線程, 且沒有超過maxThreads, 將一次性創建的空閑線程數量. Tomcat初始化時創建的線程數量也是此值.

maxSpareThreads=”75″ # 最大空閑線程數, 一旦創建的線程超過此值, Tomcat就會關閉不再需要的Socket線程, 默認值為50. 線程數可以大致用 “同時在線用戶數、用戶每秒操作次數、系統平均操作時間” 來計算.

keepAliveTimeout=”6000″ # 下次請求到來之前, Tomcat保持該連接6000ms.

maxKeepAliveRequests=”10″ # 該連接最大支持的請求數, 超過該請求數的連接也將被關閉(此時就會返回一個Connection: close頭給客戶端). 1表示禁用長連接, -1表示不限制連接個數, 默認為100, 一般設置在100~200之間.

acceptorThreadCount=”1″ # 用于接收連接的線程的數量, 默認值是1. 一般如果服務器是多核CPU時, 需要改配置為 2.

enableLookups=”false” # 是否支持反查域名(即DNS解析), 默認為true. 為提高處理能力, 應設置為false.

disableUploadTimeout=”true” # 上傳時是否啟用超時機制, 若為true, 則禁用上傳超時.

connectionTimeout=”20000″ # 網絡連接超時時間, 默認值為20000ms, 設置為0表示永不超時 —— 存在隱患. 通常可設置為30000ms.

URIEncoding=”UTF-8″ # 指定Tomcat容器的URL編碼格式.

maxHttpHeaderSize=”8192″ # HTTP請求頭信息的最大程度, 超過此長度的部分不予處理. 一般設置為8K即可.

maxPostSize=”10485760″ # 指定POST請求的內容大小, 單位為Byte, 默認大小為2097152(2MB), 10485760為10M. 如果要禁用限制, 可設置為-1.

compression=”on” # 打開傳輸時壓縮功能.

compressionMinSize=”10240″ # 啟用壓縮的輸出內容大小, 默認為2048, 即2KB.

noCompressionUserAgents=”gozilla, traviata” # 設置不啟用壓縮的瀏覽器

compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain” # 壓縮的資源類型

(2) 補充說明:

① Tomcat 的壓縮是在客戶端請求服務器對應資源后, 從服務器端將資源文件壓縮, 再輸出到客戶端, 由客戶端的瀏覽器負責解壓縮并瀏覽. 相對于普通的瀏覽過程(如瀏覽HTML、CSS、Javascript和Text), 它可以節省40%左右的流量. 更為重要的是, 它也可以對動態生成的網頁(包括CGI、PHP、JSP、ASP、Servlet、SHTML等)進行壓縮.

② 需要注意的是, 壓縮會增加Tomcat的負擔, 最好采用 Nginx + Tomcat 或 Apache + Tomcat 方式, 將壓縮交由 Nginx / Apache 去完成. 在server.xml的節點配置(尚未驗證使用):
•<Service name=”Catalina” /> — 處理所有直接由Tomcat服務器接收的web客戶請求.
•<Service name=”Apache” /> — 處理所有由Apahce服務器轉發過來的Web客戶請求.
•<Service name=”Nginx” /> — 處理所有由Nginx服務器轉發過來的Web客戶端請求.

2.2 使用NIO模式處理請求

(1) 默認配置 – BlockingIO模型:
<Connector port=”8080″ protocol=”HTTP/1.1″
          connectionTimeout=”20000″
          redirectPort=”8443″ />

(2) 關于NIO的說明:

•每個Web客戶端請求對服務器端來說就是一個單獨的線程, 客戶端請求數量增多, 服務器端的處理線程數量也將增加, 對CPU而言, 將會在線程切換上消耗更多的時間. 而NIO則是使用單線程(單個CPU)或只使用少量的多線程(多CPU)來接受Socket, 而由線程池來處理堵塞在 Pipe 或 Queue 中的請求. 這樣的話, 只要OS可以接受TCP連接, Web服務器就可以處理該請求 — 大大提高了Web服務器的伸縮性.

•Tomcat 8 下使用 NIO2, 即 org.apache.coyote.http11.Http11Nio2Protocol 更優.
•Tomcat 6、7 下使用 NIO, 即 org.apache.coyote.http11.Http11NioProtocol 更優.

(3) NIO模型配置:
<Connector executor=”tomcatThreadPool”
          port=”8080″ protocol=”org.apache.coyote.http11.Http11Nio2Protocol”
          connectionTimeout=”20000″
          redirectPort=”8443″
          maxPostSize=”10485760″
          acceptorThreadCount=”2″ />

(4) 參數說明:
executor=”…”  # 連接器使用的線程池名稱.
port=”…”      # 連接端口, URL中指定此端口進行訪問. 
protocol=”…”  # 連接器使用的請求處理模式. 
redirectPort=”8443″  # 基于SSL的端口, 在需要基于安全通道的場合, 比如當客戶端的請求協議是HTTPS時, 將該請求轉發到此8443端口.

2.3 使用APR模式處理請求

可以簡單地將APR模式理解為,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫, 進行文件讀取或網絡傳輸操作, 從而大大地提高Tomcat對靜態文件的處理性能.

APR是Tomcat上運行高并發應用的首選模式, 同時如果使用HTTPS方式傳輸, 也可以提升SSL的處理性能.

前面已經提到, APR模式會調用操作系統底層的IO接口, 所以需要安裝必要的依賴.

(1) 安裝OpenSSL:

安裝命令如下:
yum -y install openssl-devel

(2) 安裝APR組件:

•第一步: 下載apr與apr-util安裝包:
下載地址: http://apr.apache.org/download.cgi. 這里下載apr-1.6.3.tar.gz和apr-util-1.6.1.tar.gz, 然后將安裝包上傳至服務器, 這里上傳至 /usr/local 目錄下.

•第二步: 安裝apr:
cd /usr/local
tar -zxf apr-1.6.3.tar.gz
cd apr-1.6.3
# 配置安裝路徑
./configure –prefix=/usr/local/apr
# 編譯安裝
make
make install

•第三步: 安裝apr-util:
cd /usr/local
tar -zxf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
# 配置安裝路徑
./configure –prefix=/usr/local/apr-util–with-apr=/usr/local/apr
# 編譯安裝
make
make install

錯誤提示:

可能出現gcc依賴沒有安裝的錯誤, 可通過 yum install gcc 命令安裝.

如果make過程中出錯, 解決錯誤后重新安裝前需要執行清理: make clean, 然后再次嘗試make及make install過程.

如果拋出 xml/apr_xml.c:35:19: error: expat.h: No such file or directory, 說明缺少了expat庫, 可執行下屬命令安裝: yum install expat-devel.

•第四步: 配置環境變量:

上面安裝完后設置下環境變量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

或者, 將/usr/local/apr/lib包路徑添加到/etc/ld.so.conf文件中:
echo “/usr/local/apr/lib” >> /etc/ld.so.conf

(3) 安裝tomcat-native組件:

tomcat-native組件可以看作是Tomcat與APR交互的中間環節.

•第一步: 下載并解壓native安裝包:

前往 ${TOMCAT_HOME}/bin 目錄下找到tomcat-native.tar.gz, 也可前往官網(http://tomcat.apache.org/download-native.cgi)下載其他版本, 推薦使用Tomcat自帶的版本, 兼容性有更大保證.

解壓tomcat-native組件并安裝, 或上傳自己下載的native組件至服務器后, 再執行下述過程:
 cd /usr/local/tomcat/bin/
 tar -zxf tomcat-native.tar.gz
 cd tomcat-native-1.2.14-src/native/

注意: 1.1.x版本中的目錄是tomcat-native-1.1.x-src/jni/native.

•第二步: 安裝組件:
# 配置安裝參數, 其中java-home可使用默認環境變量中的配置
./configure –with-apr=/usr/local/apr –with-ssl=yes
make
make install

(4) Tomcat整合APR:

•第一步: 修改啟動腳本catalina.sh:
在${TOMCAT_HOME}/bin/catalina.sh 文件的 cygwin=false 前(110行左右)加入下述啟動參數:
JAVA_OPTS=”$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib”

•第二步: 修改容器配置文件server.xml:

查看 ${TOMCAT_HOME}/conf/server.xml 文件, 確保如下監聽器沒有被注釋掉:
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />

•修改Connector選項:
<Connector port=”8443″
            protocol=”org.apache.coyote.http11.Http11AprProtocol”
            maxThreads=”150″ SSLEnabled=”true” >
</Connector>

(5) 驗證配置是否成功:

啟動Tomcat, 在 ${TOMCAT_HOME}/logs/catalina.out 文件中查看日志信息:

•如果出現下述內容, 說明APR組件安裝不成功:
Sep 14, 2018 19:11:20 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:…

•如果出現下述內容, 說明APR組件安裝成功:
Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.6.3.
Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1e-fips 11 Feb 2013)
Sep 14, 2018 19:19:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-apr-8080”]
Sep 14, 2018 19:19:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-apr-8009”]

•Tomcat通過APR模式成功啟動:
Sep 14, 2018 19:19:56 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“http-apr-8986”]
Sep 14, 2018 19:19:56 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [“ajp-apr-8915”]
Sep 14, 2018 19:19:56 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 9421 ms

3 配置AJP連接器

AJP(Apache JServer Protocol)是為 Tomcat 與 HTTP 服務器之間通信而定制的協議, 能提供較高的通信速度和效率.

與案例說明: AJP v13 協議是面向包的, Web服務器和Servlet容器通過TCP連接來交互, 為了節省 創建Socket的昂貴代價, Web服務器會嘗試維護一個永久的TCP連接到Servlet容器, 并在多個請求與響應周期過程內重用該TCP連接.

如果使用Apache架構, 就要用AJP連接器, 當Apache接收到動態網頁請求時, 通過在配置中指定的端口號將請求發送給在此端口號上監聽的AJP連接器組件.

如果不使用Tomcat + Apache, 而是用其他架構, 如Tomcat + Nginx, 就需要注銷掉該連接器.
<!– <Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />  –>

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
性欧美大战久久久久久久| 青青在线视频免费观看| 国产精品第12页| 日韩免费毛片视频| 激情视频免费网站| 久久精品视频在线观看免费| 日本在线播放一区二区| 最新中文字幕久久| 亚洲色成人www永久在线观看| 美女扒开大腿让男人桶| 国产免费人做人爱午夜视频| 亚洲综合欧美在线| 国内自拍中文字幕| 精品一卡二卡三卡| 日本一级淫片演员| 尤物av无码色av无码| 一区二区三区 日韩| 欧美特级aaa| 日本精品福利视频| 国产精品无码专区av在线播放| 99草草国产熟女视频在线| 成人免费在线观看视频网站| 中文字幕 日韩 欧美| 97碰在线视频| jizzzz日本| 国产特级淫片高清视频| wwwwwxxxx日本| 国产精品无码av在线播放| 黄色小视频免费网站| 一女被多男玩喷潮视频| 久久久精品高清| 男人天堂1024| 亚洲小视频在线播放| www.色就是色| av动漫在线观看| 欧美人成在线观看| 91香蕉国产线在线观看| 999在线免费视频| 一女被多男玩喷潮视频| 国产精品igao激情视频| 欧美性猛交xxxx乱大交91| 啊啊啊一区二区| 日韩免费一级视频| 国产毛片久久久久久国产毛片| 一级日本黄色片| av亚洲天堂网| 国产三级生活片| 超碰超碰在线观看| 在线免费观看视频黄| 日韩手机在线观看视频| 国产精品沙发午睡系列| 和岳每晚弄的高潮嗷嗷叫视频| 最近免费观看高清韩国日本大全| 啊啊啊国产视频| 日韩亚洲在线视频| 任你操这里只有精品| 18禁免费无码无遮挡不卡网站| aa在线观看视频| 极品美女扒开粉嫩小泬| 日韩中文字幕三区| av7777777| 日本三级免费观看| 欧美在线观看www| 男人添女人荫蒂免费视频| 欧洲在线免费视频| 麻豆中文字幕在线观看| 日本黄大片一区二区三区| 成人性生交免费看| 亚洲第一天堂久久| 久久天天东北熟女毛茸茸| 日本不卡一区二区在线观看| 伊人色在线观看| 久久无码高潮喷水| 日韩五码在线观看| 久久久一本二本三本| 日韩 欧美 视频| 婷婷无套内射影院| 欧美综合在线观看视频| 午夜啪啪小视频| 91亚洲精品国产| 精品久久久久av| 欧美丝袜在线观看| 国产日本在线播放| 欧美成年人视频在线观看| 中国黄色录像片| 免费裸体美女网站| 欧美xxxx吸乳| 亚洲狼人综合干| 天堂а√在线中文在线| 亚洲免费av一区二区三区| 懂色av一区二区三区四区五区| 欧美激情 国产精品| 欧美一级xxxx| 美女福利视频在线| 香蕉视频色在线观看| 少妇性饥渴无码a区免费| 九九九久久久久久久| 激情五月开心婷婷| 国产成人一二三区| 99九九99九九九99九他书对| 亚洲美免无码中文字幕在线| 色网站在线视频| 男人女人黄一级| 欧美视频免费看欧美视频| 手机在线视频一区| 亚欧在线免费观看| 日本免费黄视频| 国产aaa免费视频| av磁力番号网| 天天操天天干天天做| 97视频在线免费播放| 亚洲熟妇无码一区二区三区导航| 欧美一级特黄aaa| 国产aaaaa毛片| 久草精品在线播放| 99视频在线免费播放| 每日在线观看av| 日韩一级性生活片| 免费网站永久免费观看| 成人免费观看视频在线观看| 99久久久精品视频| www黄色av| 无码日韩人妻精品久久蜜桃| 国产第一页视频| 日韩av一卡二卡三卡| 欧美视频在线免费播放| www.69av| 欧美日韩激情四射| 91插插插影院| 日韩av三级在线| 欧美 日韩 亚洲 一区| 青青草视频在线视频| 激情五月婷婷六月| 国产一二三四五| 在线观看成人免费| 女人床在线观看| 国产一级爱c视频| 五月丁香综合缴情六月小说| 欧美日韩福利在线| 国产成人无码a区在线观看视频| 国产精品自拍片| 国产视频一区二区三区在线播放 | 日本888xxxx| 成人黄色一级大片| 日本一区二区三区四区五区六区| 日韩人妻精品一区二区三区| 91黄色在线看| 国产91在线亚洲| 五月天激情图片| 欧美大片免费播放| 真人抽搐一进一出视频| 欧美精品一区免费| 国产精品免费观看久久| www.天天射.com| 99久久免费观看| 少妇高清精品毛片在线视频| 白嫩少妇丰满一区二区| 激情五月俺来也| 日韩精品一区在线视频| 不卡av免费在线| av无码久久久久久不卡网站| 99视频精品免费| 日韩黄色片在线| 在线观看日本一区二区| 日韩网站在线免费观看| 国产成人在线综合| 可以免费看的黄色网址| 一二三四视频社区在线| 91 视频免费观看| 97超碰人人看| 精品成在人线av无码免费看| 欧美一区二区激情| 伊人成人免费视频| 亚洲不卡中文字幕无码| 超碰在线免费av| 午夜精品久久久久久久无码| 成年人视频网站免费观看| 国产在线青青草| 最近免费观看高清韩国日本大全| 无码精品国产一区二区三区免费| 欧美亚洲一二三区| 天堂在线中文在线| 无限资源日本好片| www国产无套内射com| 99爱视频在线| 国产av人人夜夜澡人人爽麻豆| 亚洲高潮无码久久| 777久久精品一区二区三区无码 | 欧美做暖暖视频| 中文字幕久久av| 人妻熟妇乱又伦精品视频| 成人在线观看www| 99热一区二区| 一区二区三区网址| 久草福利视频在线| 日本成人黄色网| 香港日本韩国三级网站| 欧美自拍小视频| 我要看一级黄色大片| 三级一区二区三区|