linux下jvm優化、tomcat調優

来源:https://www.cnblogs.com/liuliuyan/archive/2019/02/22/10418026.html
-Advertisement-
Play Games

系統環境:jdk1.8,apache-tomcat-8.5.35 一、jvm優化 進入 bin/catalina.sh,修改JAVA_OPTS配置: JAVA_OPTS="-server -Xms8192M -Xmx8192M -XX:NewRatio=4 -XX:SurvivorRatio=8 - ...


 

系統環境:jdk1.8,apache-tomcat-8.5.35

一、jvm優化

進入 bin/catalina.sh,修改JAVA_OPTS配置:

JAVA_OPTS="-server -Xms8192M -Xmx8192M -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/javamemorylogs/dump -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/usr/local/javamemorylogs/gclog -XX:+DisableExplicitGC"

各參數含義: (1)-server:表示這是應用於伺服器的配置,JVM 內部會有特殊處理的 。 (2)-Xms8192m:設置JVM最小記憶體。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體。 (3)-Xmx8192m:設置JVM最大可用記憶體。 (4):-XX:NewRatio=4:設置年輕代(包括 Eden 和兩個 Survivor 區)與終身代的比值(除去永久代)。設置為 4,則年輕代與終身代所占比值為 1:4,年輕代占整個堆棧的 1/5 。 (4)-XX:SurvivorRatio=8:年輕代中Eden區與兩個Survivor區的比值。註意Survivor區有兩個。如:8,表示Eden:Survivor=8:2,一個Survivor區占整個年輕代的1/10。 (5)-XX:+UseConcMarkSweepGC:CMS收集,設置年老代為併發收集。它的主要適合場景是對響應時間的重要性需求大於對吞吐量的需求,能夠承受垃圾回收線程和應用線程共用CPU資源,並且應用中存在比較多的長生命周期對象。CMS收集的目標是儘量減少應用的暫停時間,減少Full GC發生的幾率,利用和應用程式線程併發的垃圾回收線程來標記清除年老代記憶體。 (6)-XX:ParallelGCThreads=8:表示JVM在進行並行GC的時候,用於GC的線程數。 (7)-XX:+HeapDumpOnOutOfMemoryError:可以讓JVM在出現記憶體溢出時候Dump出當前的記憶體轉儲快照。 (8)XX:HeapDumpPath:生成DUMP文件的路徑,如不設置,預設存儲在jvm 運行環境目錄。 (9)-XX:+PrintGCDetails:列印GC詳細信息。 (10)-XX:+PrintGCDateStamps:記錄GC日誌並不會特別地影響Java程式性能,推薦你儘可能記錄日誌。 (11)-Xloggc:指定GC log的位置,以文件輸出。幫助開發人員分析問題。 (12)-XX:+DisableExplicitGC:這個將會忽略手動調用 GC 的代碼使得 System.gc() 的調用就會變成一個空調用,完全不會觸發任何 GC。

二、tomcat優化

1.修改conf/server.xml如下兩段配置:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="700" minSpareThreads="100" maxSpareThreads="400" prestartminSpareThreads = "true" maxQueueSize = "300"/>   <Connector executor="tomcatThreadPool" port="80" protocol="org.apache.coyote.http11.Http11Nio2Protocol" acceptCount="500" connectionTimeout="20000" redirectPort="8443" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" enableLookups="false" useURIValidationHack="false" maxConnections="1000" tcpNoDelay="true" /> 重點參數解釋: (1)maxThreads:最大併發數,預設設置 200,一般建議在 500 ~ 800,根據硬體設施和業務來判斷 (2)minSpareThreads:Tomcat 初始化時創建的線程數,預設設置 25 (3)prestartminSpareThreads:在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等於 true,minSpareThreads 的值就沒啥效果了 (4)maxQueueSize:最大的等待隊列數,超過則拒絕請求 (5)acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,預設設置 100 (6)maxConnections:伺服器在任何給定時間將接受和處理的最大連接數。當達到這個數字時,伺服器將接受,但不處理另一個連接。這個額外的連接將被阻塞,直到正在處理的連接數量低於maxConnections,此時伺服器將開始接受並再次處理新的連接。請註意,一旦達到限制,操作系統仍然可以接受基於acceptCount設置的連接。預設值因連接器類型而異。對於BIO,預設值是maxThreads的值,除非使用Executor,在這種情況下,預設值將是執行者的maxThreads的值。對於NIO和NIO2,預設值為10000.對於APR/native,預設值為8192。簡單來說就是nio使用maxConnections代替maxThreads。 (7)enableLookups:禁用DNS查詢

2.關閉shutdown埠

shown埠是寫在Server參數里的,直接去掉是不管用,也是會預設啟動的,一般在安全設置時候建議把埠修改為其他埠,shutdown修改為其他複雜字串。實際上這個埠是可以直接屏蔽不監聽的。設置時候將其port值修改為-1即可: <Server port="-1" shutdown="SHUTDOWN">

3、禁用tomcat Manager管理入口

為防止從tomcat web管理界面上傳文件,破壞運行環境,可以手動刪除tomcat自帶的管理界面。 進入tomcat預設頁面時有“server status”、“manager app”、“Host manager”。 如果修改conf/tomcat-users.xml,配置後: <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <user username="user" password="password" roles="admin,manager,manager-gui"/>

訪問tomcat web頁面,用上面配置的用戶名密碼登錄將會出現如下界面,一旦用戶名密碼泄露或被攻擊,伺服器很容易被破壞。

Server Status

Manager App

 

Host Manager

避免如上界面入口引發問題,操作如下: 1、進入tomcat/webapps目錄 2、只保留manager,ROOT,以及項目相關文件,刪除其他包含docs、examples、host-manager文件(rm -rf 目錄名稱),如果怕出錯,請先備份要刪除的文件

重新啟動tomcat後,Tomcat Manager Web將如下:

Server Status

 

Manager App

Host Manager

恭喜!優化設置到此結束,趕緊嘗試一下吧!


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

-Advertisement-
Play Games
更多相關文章
  • 接下來就要說說應用 Asp.Net Core 的特性(跨平臺),將 .NetCore 部署到 Linux 中,主流的 Linux 有多個版本的操作系統,這裡以 Centos-7.5 為例子 ...
  • 0.安裝步驟預覽(1)系統預設自帶python2.x,所以需要先安裝python3.x(2)python2對應pip,python3對應pip3,用源碼安裝python3後pip3也自動安裝了(3)用pip3安裝virtualenv(4)用virtualenv創建python3的虛擬環境(5)在創建 ...
  • 1. 打開CMD,輸入以下命令 1 ipconfig -all 2. 設置主機Wi-Fi網路對VMnet8虛擬網卡的網路共用 3. 虛擬機NAT模式配置 4. 配置虛擬機網卡信息 切換到ROOT 1 cd /etc/sysconfig/network-scripts 2 vi ifcfg-eth0 ...
  • Active Directory 域服務安裝與測試 實驗原理: 安裝域服務並創建用戶,把另一個電腦加入域中,然後用域賬戶登錄以及用本地賬戶登錄測試 實驗條件:windows server 2008(域控制器), win7(加入域的pc) 實驗步驟: 一、安裝域服務以及配置信息 1.打開”服務管理器” ...
  • 一、安裝 1.檢查gcc環境 執行命令,如果Linux系統沒有安裝gcc編譯器,會提示“Command not found” # gcc -v 安裝gcc # yum -y install gcc 以上是make需要的,不裝會報錯! 2.下載Redis # cd /usr/local # wget ...
  • 一、文件許可權 使用 ls -l 命令可以查看文件的具體屬性: 如圖所示,第一列所示告訴了用戶一個文件的類型和許可權信息: 1)第一個字元 "d",表明該文件是一個目錄文件; 2)r 表示該文件具有可讀許可權; 3)w 表示該文件具有寫許可權; 4)x 表示該文件具有可執行許可權。 5)第一個 rwx 表示該 ...
  • zabbix介紹 zabbix是一個基於WEB界面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。 zabbix能監視各種網路參數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。 zabbix由2部分構成,zabbix server與可選組件z ...
  • 簡介 hash命令是bash的內置命令。 我們知道在bash中執行外部命令,會根據環境變數PATH來逐一搜索命令的路徑。 hash就是用於記住命令的路徑,並且在下次執行命令的時候直接通過hash獲取而不再通過PATH一步步尋找,加快了尋找命令的速度。 hash就像是命令的緩存。 語法 語法中的nam ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...