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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...