tomcat調優

来源:https://www.cnblogs.com/lhj2/archive/2019/07/21/11222882.html
-Advertisement-
Play Games

5、預設tomcat要使用在生產環境需要做哪些優化 lTomcat記憶體優化 Tomcat記憶體優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 JAVA_OPTS 參數。 JAVA_OPTS='-Xms1024m -Xmx2048m -XX ...


5、預設tomcat要使用在生產環境需要做哪些優化

 

 

lTomcat記憶體優化

Tomcat記憶體優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 JAVA_OPTS 參數。

JAVA_OPTS='-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

參數說明:

-server 啟用jdk server 版;

-Xms java虛擬機初始化時的最小記憶體;

-Xmx java虛擬機可使用的最大記憶體;

-XX:PermSize 記憶體永久保留區域

-XX:MaxPermSize 記憶體最大永久保留區域

l壓縮傳輸

tomcat作為一個應用伺服器,也是支持 gzip 壓縮功能的。我們可以在 server.xml 配置文件中的 Connector 節點中配置如下參數,來實現對指定資源類型進行壓縮。

compression="on" # 打開壓縮功能

compressionMinSize="50" # 啟用壓縮的輸出內容大小,預設為2KB

noCompressionUserAgents="gozilla, traviata" # 對於以下的瀏覽器,不啟用壓縮

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些資源類型需要壓縮

提示:

Tomcat 的壓縮是在客戶端請求伺服器對應資源後,從伺服器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮並瀏覽。相對於普通的瀏覽過程 HTMLCSSJavascriptText,它可以節省40% 左右的流量。更為重要的是,它可以對動態生成的,包括CGIPHPJSPASPServlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率也很高。但是,壓縮會增加 Tomcat 的負擔,因此最好採用Nginx + Tomcat 或者 Apache + Tomcat 方式,將壓縮的任務交由 Nginx/Apache 去做。

l多實例

強烈建議不要使用 Tomcat 的虛擬主機,推薦每個站點使用一個實例。即,可以啟動多個 Tomcat,而不是啟動一個 Tomcat 裡面包含多個虛擬主機。因為 Tomcat是多線程,共用記憶體,任何一個虛擬主機中的應用崩潰,都會影響到所有應用程式。雖然採用多實例的方式會產生過多的開銷,但至少保障了應用程式的隔離和安全。

lmaxThreads 連接數限制

maxThreads Tomcat 所能接受最大連接數。一般設置不要超過8000以上,如果你的網站訪問量非常大可能使用運行多個Tomcat實例的方法,即,在一個伺服器上啟動多個tomcat然後做負載均衡處理。

這裡還需要註意的一點是,tomcat php 不同。php可以按照cpu和記憶體的情況去配置連接數,上萬很正常。而 java 還需要註意 jvm 的參數配置。如果不註意就會因為jvm參數過小而崩潰。

預設值:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

        maxThreads="150" minSpareThreads="4"/>

修改為:

<Executor

    name="tomcatThreadPool"

    namePrefix="catalina-exec-"

    maxThreads="500"

    minSpareThreads="100"

    prestartminSpareThreads = "true"

    maxQueueSize = "100"

/>

參數解釋:

maxThreads,最大併發數,預設設置 200,一般建議在 500 ~ 800,根據硬體設施和業務來判斷

minSpareThreadsTomcat 初始化時創建的線程數,預設設置 25

prestartminSpareThreads,在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等於 trueminSpareThreads 的值就沒啥效果了

maxQueueSize,最大的等待隊列數,超過則拒絕請求

l隱藏版本信息

為了避免黑客針對某些版本進行攻擊,因此我們需要隱藏或者偽裝 Tomcat 的版本信息。

針對該信息的顯示是由一個jar包控制的,該jar包存放在 Tomcat 安裝目錄下的lib目錄下,名稱為 catalina.jar

我們可以通過 jar xf 命令解壓這個 jar 包會得到兩個目錄 META-INF org ,通過修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 欄位來實現來更改我們tomcat的版本信息。

文件信息如下:

[root@localhost ~]# cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'

server.info=Apache Tomcat/7.0.53

server.number=7.0.53.0

server.built=Mar 25 2014 06:20:16

當然,還有另外一種方法來實現隱藏或偽裝Tomcat的版本信息,不過本質和上面一樣,操作如下:

[root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib

[root@localhost lib]# mkdir -p org/apache/catalina/util

[root@localhost lib]# cd org/apache/catalina/util

[root@localhost util]# vim ServerInfo.properties

server.info=nolinux # 如果想修改成其它版本號,把這個地方的值改成其它值就行了

修改完畢之後,重啟 Tomcat即可看到效果!

lconnector連接器的工作方式

之前文件介紹過的 Tomcat 連接器的三種方式: bionio apr,三種方式性能差別很大,apr 的性能最優, bio 的性能最差。而 Tomcat 7 使用的 Connector  預設就啟用的 Apr 協議,但需要系統安裝 Apr 庫,否則就會使用 bio 方式。

l禁用DNS查詢

web應用程式向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過功能變數名稱伺服器查找機器名 轉換為IP地址。

DNS查詢需要占用網路,並且包括可能從很多很遠的伺服器或者不起作用的伺服器上去獲取對應的IP的過程,這樣會消耗一定的時間。

修改server.xml文件中的Connector元素,修改屬性enableLookups參數值: enableLookups="false"

如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址

Tomcat的運行模式有哪幾種?

Tomcat Connector三種運行模式:BIO, NIO, APR

BIO

一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。Tomcat7或以下,在Linux系統中預設使用這種方式。

NIO

利用Java的非同步IO處理,可以通過少量的線程處理大量的請求。Tomcat8Linux系統中預設使用這種方式。Tomcat7必須修改Connector配置來啟動:

<Connector port="8080"

           protocol="org.apache.coyote.http11.Http11NioProtocol"

           connectionTimeout="20000"

   redirectPort="8443"/>

Tomcat8以後NIO2模式:

<Connector  port="8080"

            protocol="org.apache.coyote.http11.Http11Nio2Protocol"

            connectionTimeout="20000"

    redirectPort="8443"/>

APR

Apache Portable Runtime,從操作系統層面解決io阻塞問題。Tomcat7Tomcat8Win7或以上的系統中啟動預設使用這種方式。Linux如果安裝了aprnativeTomcat直接啟動就支持apr

預設的鏈接參數配置:

 

 

<Connector

    port="8080"

    protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="8443"

/>

修改為:

 

 

<Connector  executor="tomcatThreadPool"

            port="8080"

            protocol="org.apache.coyote.http11.Http11Nio2Protocol"

            connectionTimeout="20000"

    redirectPort="8443"/>

參數解釋:

 

 

protocolTomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol

protocolTomcat 67 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol

enableLookups,禁用DNS查詢

acceptCount,指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,預設設置 100

maxPostSize,以 FORM URL 參數方式的 POST 提交方式,限制提交最大的大小,預設是 2097152(2),它使用的單位是位元組。10485760 10M。如果要禁用限制,則可以設置為 -1

acceptorThreadCount,用於接收連接的線程的數量,預設值是1。一般這個指需要改動的時候是因為該伺服器是一個多核CPU,如果是多核 CPU 一般配置為 2


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、簡要介紹 ABP vNext 框架本身就是圍繞著 DDD 理念進行設計的,所以在 DDD 裡面我們能夠見到的實體、倉儲、值對象、領域服務,ABP vNext 框架都為我們進行了實現,這些基礎設施都存放在 Volo.Abp.Ddd.Domain 項目當中。 本篇文章將會側重於理論講解,但也只是一個 ...
  • Windows無法上網,提示[Windows無法連接到 System Event Notification Service服務] ...
  • 解決Deepin無法在root用戶啟動Google Chrome瀏覽器的問題,步驟如下。 前提:如何用root用戶登錄系統?編輯 vim /etc/lightdm/lightdm.conf , 找到並賦值 autologin-user=root,保存退出即可。 1.找到Chrome的路徑 2.編輯g ...
  • iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允許本地迴環介面(即運行本機訪問本機) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允許已建立的或相關 ...
  • 如何高效獲取命令幫助信息 一、 內核版本號:主.次.修訂 系統中:用戶名UID(只認識,不認識名字) root:密碼 student: 3A認證: 認證機制authentication 密碼認證:符合複雜性 字元長度(至少7位) 不要使用易記 定期更改 重覆密碼的時間要長 授權機制authoriza ...
  • Linux系統說明 Linux( 誕生於1991.10.5) 繼承了Unix以網路為核心的設計思想, 是一個性能穩定的多用戶網路操作系統. Linux這個詞嚴格意義上只表示Linux內核, 但日常中, 習慣用Linux來形容整個基於Linux內核, 並使用GNU( 一個自由的操作系統) 工程各種工具 ...
  • Oracle表級約束和列級約束 1. 表級定義約束 指的是在定義完一個表所有列之後,再去定義所有相關的約束。 註意:not null 約束只能在列級上定義。 2. 列級定義約束 指的是在定義一個表的每一列的同時定義每一個列的約束條件,其約束條件 位於每一列之後。 約束:FOREIGN KEY,PRI ...
  • 1 意義 1.1 分層的 APIs & 抽象層次 Flink提供三層API。 每個API在簡潔性和表達性之間提供不同的權衡,並針對不同的用例。 而且Flink提供不同級別的抽象來開發流/批處理應用程式 最低級抽象只提供有狀態流。它通過Process Function嵌入到DataStream API ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...