Tomcat配置與性能調優

一、Tomcat文件詳解

日誌文件logs

catalina.out

catalina.out其實是tomcat的標準輸出(stdout)和標準出錯(stderr),在tomcat的啓動腳本里指定的,沒有修改的話stdout和stderr會重定向到這裏。

catalina.-.log

訪問日誌信息,訪問的時間、IP、訪問的資料等。

localhost.-.log

運行日誌信息,運行異常、錯誤日誌等。

配置文件conf

server.xml 主要配置文件。

web.xml 缺省的web app配置,WEB-INF/web.xml會覆蓋該配置。

tomcat-users.xml 用戶配置文件。

二、安全配置

修改shutdown命令

# vim server.xml
<Server port="8005" shutdown="SHUTDOWN">
SHUTDOWN修改爲其他字符串

修改用戶名、密碼

# vim tomcat-users.xml

添加以下內容

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="redhat" roles="manager-gui"/>

屏蔽後臺管理入口

方法1.控制用戶和權限,廢掉要管理權限的用戶。
方法2.將conf/Catalina/localhost/manager.xml更名。

配置403,404,500錯誤頁面

默認情況下,報出HTTP錯誤的時候會暴露tomcat版本號,需要重新定義錯誤跳轉頁面。

三、項目部署

第一種方法(直接放入 webapps 目錄)

編寫並編譯好的web項目(如果是 eclipse,將項目打成 war 包),放入到 webapps 中

第二種方法(修改 conf/server.xml 文件 )

# vim server.xml

在<Host> </Host>標籤之間輸入項目配置信息

<Context path="/Web" docBase="/Wh_k/test" reloadable="true" />

path:瀏覽器訪問時的路徑名
docBase:web項目的WebRoot所在的路徑,注意是WebRoot的路徑,不是項目的路徑,其實也就是編譯後的項目。
reloadble:設定項目有改動時,tomcat是否重新加載該項目

第三種方法(conf\Catalina\localhost )

# touch test.xml

加入下面配置語句

<Context  docBase="/Wh_k/test" reloadable="true" />

總結

① 第一種方法我們需要將編譯好的項目重新 copy 到 webapps 目錄。

② 第二種方法直接在 server.xml 文件中配置,從 tomcat5.0版本後,server.xml 文件作爲啓動的主要配置文件,Tomcat 啓動後便不會再讀取這個文件,因此無法再 tomcat 服務啓動後發佈 web 項目。

③ 第三種方法是通常使用的方法,每個項目分開配置,tomcat 將以\conf\Catalina\localhost 目錄下的 xml 文件的文件名作爲 web 應用的上下文路徑,而不再理會 <Context>中配置的 path 路徑,在配置的時候,可以不用填寫 path。

四、Tomcat性能調優

1、優化內存JDK(最直接優化方式)

主要是對 tomcat 啓動參數優化,在 tomcat 的啓動腳本 catalina.sh 中設置 java_OPTS 參數

參數說明:

-server 啓用jdk 的 server 版
-Xms java虛擬機初始化時的最小內存
-Xmx java虛擬機可使用的最大內存
-XX: PermSize 內存永久保留區域
-XX:MaxNewSize:新生代佔整個堆內存的最大值。
-XX:MaxPermSize 內存最大永久保留區域

配置示例

# vim catalina.sh
添加以下內容:
JAVA_OPTS='-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

錯誤提示

1)錯誤提示:java.lang.OutOfMemoryError:Java heap space

Tomcat默認可以使用的內存爲128MB,在較大型的應用項目中,這點內存是不夠的,有可能導致系統無法運行。常見的問題是報Tomcat內存溢出錯誤,Outof Memory(系統內存不足)的異常,從而導致客戶端顯示500錯誤,一般調整Tomcat的-Xms和-Xmx即可解決問題,通常將-Xms和-Xmx設置成一樣,堆的最大值設置爲物理可用內存的最大值的80%。
set JAVA_OPTS=-Xms512m-Xmx512m

2)錯誤提示:java.lang.OutOfMemoryError: PermGenspace

PermGenspace的全稱是Permanent Generationspace,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGenspace中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGenspace進行清理,所以如果你的應用中有很CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web服務器對JSP進行precompile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤信息了。解決方法:
setJAVA_OPTS=-XX:PermSize=128M

3)在使用-Xms和-Xmx調整tomcat的堆大小時,還需要考慮垃圾回收機制。如果系統花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過3-5 秒。如果垃圾收集成爲瓶頸,那麼需要指定代的大小,檢查垃圾收集的詳細輸出,研究垃圾收集參數對性能的影響。一般說來,你應該使用物理內存的 80% 作爲堆大小。當增加處理器時,記得增加內存,因爲分配可以並行進行,而垃圾收集不是並行的。

2、優化連接數

2.1.優化線程數

# vim server.xml 

增加maxThreads和acceptCount屬性(使acceptCount大於等於maxThreads),如下:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

• maxThreads:tomcat可用於請求處理的最大線程數,默認是200
• minSpareThreads:tomcat初始線程數,即最小空閒線程數
• maxSpareThreads:tomcat最大空閒線程數,超過的會被關閉
• acceptCount:當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理.默認100

2.2.使用線程池

# vim server.xml
增加executor節點,然後配置connector的executor屬性

<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
其中:
• namePrefix:線程池中線程的命名前綴
• maxThreads:線程池的最大線程數
• minSpareThreads:線程池的最小空閒線程數
• maxIdleTime:超過最小空閒線程數時,多的線程會等待這個時間長度,然後關閉
• threadPriority:線程優先級

3、關閉DNS查詢

enableLookups=”false”

4、配置gzip壓縮(HTTP壓縮)功能

# vim server.xml
●compression="on"   打開壓縮功能
●compressionMinSize="2048"啓用壓縮的輸出內容大小,默認爲2KB
●noCompressionUserAgents="gozilla,traviata" 對於以下的瀏覽器,不啓用壓縮
●compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮

配置示例如下:

<Connector port="9999" protocol="HTTP/1.1" connectionTimeout="20000"
    redirectPort="8443" acceptCount="500" maxThreads="400" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

5、改變運行模式

tomcat的運行模式有3種:BIO NIO APR

bio

默認的模式,同步並阻塞,服務器實現模式爲一個連接一個線程,性能非常低下,沒有經過任何優化處理和支持。

nio

基於緩衝區、並能提供非阻塞I/O操作的Java API,同一個線程處理多個connection(多路複用),Tomcat 8.x默認情況下全部是運行在nio模式下

想運行在該模式下,直接修改server.xml裏的Connector節點,修改protocol爲

<Connector port=”9999″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />

啓動後,就可以生效。

apr

apr的本質就是使用jni技術調用操作系統底層的IO接口,安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能。生產環境下用apr是非常必要的。

# yum -y install openssl-devel
# yum -y install apr-devel
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.18/source/tomcat-native-1.2.18-src.tar.gz
# tar -xzf tomcat-native-1.2.18-src.tar.gz
# cd tomcat-native-1.2.18-src/native
# ./configure && make && make install

將默認的protocol="HTTP/1.1"修改爲protocol="org.apache.coyote.http11.Http11AprProtocol"

引入apr:配置catalina.sh文件
在原有變量JAVA_OPTS後面追加一行新的配置即可:JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章