寫在前面
Tomcat作為最常用的Java Web服務器,隨著併發量越來越高,Tomcat的性能會急劇下降,那有沒有什麼方法來優化Tomcat在高併發環境下的性能呢?
Tomcat運行模式
Tomcat的運行模式有3種。
1.bio模式
默認的模式,性能非常低下,沒有經過任何優化處理和支持。
2.nio模式
利用java的異步io護理技術,noblocking IO技術。要想運行在該模式下,則直接修改server.xml裡的Connector節點,修改protocol為如下配置。
<code>protocol
="org.apache.coyote.http11.Http11NioProtocol"
/<code>
重啟Tomcat後,就可以生效。
3.apr模式
安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能。此種模式下,必須要安裝apr和native,直接啟動就支持apr。如nio修改模式,修改protocol為org.apache.coyote.http11.Http11AprProtocol,如下所示。
<code>protocol
="org.apache.coyote.http11.Http11AprProtocol"
/<code>
Tomcat併發優化
安裝APR
<code>[root@binghe ~] [root@binghe ~] [root@binghe ~] [root@binghe native] [root@binghe native]/<code>
安裝完成之後 會出現如下提示信息
<code>Libraries have been installedin
: /usr/local
/apr/lib/<code>
安裝成功後還需要對tomcat設置環境變量,方法是在catalina.sh文件中增加1行:
在這段代碼下面添加:
修改server.xml的配置,如下所示。
<code>protocol
=”org.apache.coyote.http11.Http11AprProtocol”/<code>
啟動tomcat之後,查看日誌,如下所示。
<code>more
TOMCAT_HOME/logs/catalina.out
2020
-04
-17
22
:34:56
org.apache.catalina.core.AprLifecycleListener
init
INFO:
Loaded
APR
based
Apache
Tomcat
Native
library
1.1
.31
using
APR
version
1.3
.9
.
2020
-04
-17
22
:34:56
org.apache.catalina.core.AprLifecycleListener
init
INFO:
APR
capabilities:
IPv6
[true],
sendfile
[true],
accept
filters
[false],
random
[true].
2020
-04
-17
22
:34:56
org.apache.catalina.core.AprLifecycleListener
initializeSSL
INFO:
OpenSSL
successfully
initialized
(OpenSSL
1.0
.1e
11
Feb
2013
)
2020
-04
-17
22
:34:58
AM
org.apache.coyote.AbstractProtocol
init
INFO:
Initializing
ProtocolHandler
[“http-apr-8080”]
2020
-04
-17
22
:34:58
AM
org.apache.coyote.AbstractProtocol
init
INFO:
Initializing
ProtocolHandler
[“ajp-apr-8009”]
2020
-04
-17
22
:34:58
AM
org.apache.catalina.startup.Catalina
load
INFO:
Initialization
processed
in
1125
ms
/<code>
Tomcat優化
1.JVM 調優
在TOMCAT_HOME/bin/catalina.sh 增加如下語句,具體數值視情況而定。添加到上面CATALINA_OPTS的後面即可,如下所示。
<code>JAVA_OPTS
=-Xms512m -Xmx1024m -XX:PermSize=512
M -XX:MaxNewSize=1024
m -XX:MaxPermSize=1024
m/<code>
參數詳解
- -Xms:JVM初始化堆內存大小。
- -Xmx:JVM堆的最大內存。
- -Xss:線程棧大小。
- -XX:PermSize:JVM非堆區初始內存分配大小。
- -XX:MaxPermSize:JVM非堆區最大內存。
建議和注意事項:
-Xms和-Xmx選項設置為相同堆內存分配,以避免在每次GC 後調整堆的大小,堆內存建議佔內存的60%~80%;非堆內存是不可回收內存,大小視項目而定;線程棧大小推薦256k。
32G內存配置如下:
<code>JAVA_OPTS
=-Xms20480m -Xmx20480m -Xss1024K -XX:PermSize=512
m -XX:MaxPermSize=2048
m/<code>
2.關閉DNS反向查詢
在
<code>enableLookups=”false”/<code>
3.優化tomcat參數
在server.xml文件中進行如下配置。
<code><Connector>/<code>
寫在最後
最後,附上併發編程需要掌握的核心技能知識圖,祝大家在學習併發編程時,少走彎路。