記錄幾個優化tomcat的常見方法

最近公司又在搞安全監控,針對tomcat關於AJP端口存在的漏洞要求升級指定版本或關閉該端口重啓服務,小編所在的部門關於tomcat外置服務器AJP端口早已關閉,得益於前技術總監的優化建議。

以下是關於前技術總監關於tomcat優化的建議,拿小本本記下的內容:

1.關閉AJP端口8009

在tomcat前再使用web服務器時,即便tomcat提供的都是靜態資源文件,情況都要比直接使用http連接差的多,如果確實有需要集成前置服務器,走AJP協議要比http協議性能更好。通常前置服務器有nginx做靜態伺服器和方向代理足矣,無需使用AJP,不用的資源直接關掉即可。

2.關閉access_log

外置tomcat服務器server.xml中會輸出access_log日誌,基本沒有什麼價值,可以關閉了。springboot中內置的tomcat默認就是關閉access_log的。

<Valve className="org.apache.catalina.valves.AccessLogValve" 
directory="logs"  prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

3.關閉無用的servlet

有些無用的servlet配置也可以去掉,例如未使用jsp可以關掉相關的配置。

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  <init-param>
    <param-name>fork</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>false</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>

4.war包與tomcat分離開

不要直接把war包上傳到webapps下發布,應該將war包放到指定的目錄,並在conf/Catalina/localhost目錄下添加相應的配置文件,內容如下。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\demo.war" />

5.生產環境禁止啓用屬性的reloadable=true

reloadable是需要線程監聽程序文件修改的,然後重新加載web應用,默認值是false(不同版本可能有差異),開發測試可以啓用。

6.連接器connector使用線程池

server.xml文件中有註釋掉的相關配置,合理設置線程池最大值,最小值,最大連接數,超時時間等,可通過jemeter進行壓力測試,沒有放之四海皆準的配置。namePrefix可以自定義方便標識。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-star-"
 maxThreads="200" connectionTimeout="20000" minSpareThreads="10"/>

7.jsp預編譯

我們知道jsp是通過servlet寫出的,所以訪問jsp頁面會進行編譯操作,jsp->java->class,提前把jsp編譯成class可以減少運行時編譯,當然這需要因地制宜。

8.連接器配置protocal

設置協議處理傳入的流量,默認值是HTTP/1.1,tomcat會自動選擇apr(如果存在相關本地庫)或java nio,也可指定協議。

org.apache.coyote.http11.Http11NioProtocol -non blocking Java NIO connector
org.apache.coyote.http11.Http11Nio2Protocol -non blocking Java NIO2 connector
org.apache.coyote.http11.Http11AprProtocol -the APR/native connector.

9.合理設置JAVA_OPTS

相關設置需要結合服務器信息(內存,處理器等),可以打開gc日誌,使用jemeter壓測進行相應調整,適當調整各代大小減少gc。

set "JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Xss512k -Xloggc:/star_gc.log -XX:+PrintGCDetails -XX:+UseG1GC"

10.有關session管理

如果有會話管理,可以直接使用tomcat生成的sessionId策略,無需自己再生成一套sessionId,或者實現SessionIdGenerator 定義自己的session管理,儘量減少重複性工作。

覺得有用,點個關注,【碼農小麥】公衆號同

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章