安全優化
- 管理端口保護
在server.xml文件下把管理端口和口令修改一下,防止圖謀不軌的人telnet上來關掉我的tomcat:
- ajp連接端口保護
Apache JServ協議1.3版(簡稱ajp13)是一個二進制的TCP傳輸協議,相比當前HTTP這種純文本協議來說它的效率和性能更加高效,然而,目前的瀏覽器並不能直接支持ajp13,就連目前非常火爆的nginx也沒有相應的模塊能支持ajp。按照官方的說法就是如果你使用的是apache,而Apache的proxy_ajp模塊進行反向代理能大大提高動靜分離的性能(說白了就是僅對Apache有用)。如果你用得不是apache那就趁早這樣設置吧:
- 禁用管理頁面
管理頁面能看到我們服務的所有配置信息,一般在生產上是不建議開啓的。
另外一個就是在我們部署完成tomcat之後建議做以下處理:
刪除conf目錄下的tomcat-users.xml
刪除webapps目錄下默認的所有目錄和文件
將tomcat網站目錄配置在安裝目錄以外的目錄
- 使用監牢模式以管理維護tomcat
監牢模式是指讓服務通過非root用戶啓動、關閉、管理tomcat。
在切換用戶之前先關閉tomcat服務再以普通用戶的身份啓動tomcat能看到服務啓動成功。
- 文件列表訪問控制
tomcat的訪問控制相當於nginx的autoindex功能,編輯conf目錄下的web.xml文件,設置爲true則開啓:
- 隱藏版本信息
tomcat和其它web服務器也一樣需要隱藏版本信息防止通過漏洞對網站進行攻擊,在web.xml添加:
<error-page>
4727 <error-code>403</error-code>
4728 <location>/forbidden.jsp</location>
4729 </error-page>
4730
4731 <error-page>
4732 <error-code>404</error-code>
4733 <location>/notfound.jsp</location>
4734 </error-page>
4735
4736 <error-page>
4737 <error-code>500</error-code>
4738 <location>/busy.jsp</location>
4739 </error-page>
在server.xml添加:
可以看到:
- 訪問控制
tomcat的訪問控制相當於nginx的deny跟allow,用來限制某個IP的訪問請求只需在host相應區內配置:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.8.*" />
- 啓停腳本權限設置
[root@localhost:/app/tomcat/bin]# chmod 700 ./*.sh
- 修改訪問日誌格式
在server.xml修改爲:
%{Referer}i %{User-Agen t}i %D" resolveHosts="false"
性能優化
- 參數數值優化
先不設置數值,通過壓力測試軟件做壓力測試看看tomcat性能再增加優化參數。
常見的壓力測試工具:
壓力測試going工具 | |
---|---|
ab/webbench | http壓力測試 |
jmeter | 壓力測試java(tomcat) |
dd/fio | 磁盤 |
mysqlslap | 測試數據庫 |
loadrunner | 專業測試工具 |
jmeter壓力測試工具準備
下載好jmeter工具之後在bin目錄下有個jmeter.bat文件打開之後
配置好之後可以看到一些信息:
聚合報告中各項項指標含義如下:
樣本
:jmeter發送了多少個請求
平均值
:平均響應時間
中位數
:50%用戶的響應時間
90%百分位
:90%用戶的響應時間
最小值
:最小響應時間
最大值
:最大響應時間
異常
:本次測試產生錯誤請求的數量
吞吐量
:每秒完成的請求數,我們要優化調整的參數
接收
:每秒從服務器接收到的數據量
調整線程組的線程數等參數用於壓力測試:
在tomcat的server.xml文件中添加優化參數:
maxThreads="500"
:最大的線程數,根據CPU的運算能力設置大小,如果CPU在計算的情況下應適當設置小一些;如果是IO頻繁的情況下,則適當調大
acceptCount="500"
:當達到最大線程數量的時候的隊列長度,一般設置跟maxThreads數一樣
minSpareThreads="10"
:空閒時最小的線程數量
enableLookups="false"
:禁用DNS解析
compression="on"
:打開壓縮功能
compressionMinSize="2048"
:最小壓縮文件大小,單位字節
compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf"
:壓縮哪些類型的文件
disableUpTimeout="true"
:禁用上傳文件超時
acceptorThreadCount="2"
:接收連接線程的個數
- jvm優化
調整jvm的初始內存大小:
修改catalina.sh文件
JAVA_OPTS='-Xms1024m -Xmx1024m -Xloggc:/var/log/tomcat_gc.log'
-Xms
:jvm初始內存大小
-Xmx
:jvm最大內存,一般設置爲-Xms的2倍
gc
:垃圾回收機制,定期清理jvm內存
-Xloggc
:執行gc時候記錄日誌
如果是jar包在解壓時指定這些參數:java -jar xxx.jar -Xms1024m -Xmx1024m -Xloggc:/var/log/tomcat_gc.log