Tomcat運行比較卡頓進行參數調優

在Tomcat? ? ?conf/catalina.bat或catalina.sh中 的最上面增加參數

1. 初步調整參數(緩解問題)
set JAVA_OPTS=
-Xms6g -Xmx6g 
-Xmn3g                    # 增大新生代,減少對象過早晉升到老年代
-XX:MetaspaceSize=256m 
-XX:MaxMetaspaceSize=1g 
-XX:+UseG1GC 
-XX:MaxGCPauseMillis=200 
-XX:+ParallelRefProcEnabled  # 加速引用處理
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=./heapdump.hprof --JDK9使用參數
-Xlog:gc*,gc+heap=debug:file=./logs/gc.log:time,uptimemillis:filecount=10,filesize=10M--JDK8及以下使用參數 
-Xloggc:./logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 ?-XX:GCLogFileSize=10M

--JDK9使用參數

set JAVA_OPTS= -Xms6g -Xmx6g  -Xmn3g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof -Xlog:gc*,gc+heap=debug:file=./logs/gc.log:time,uptimemillis:filecount=10,filesize=10M

--JDK8及以下使用參數

set JAVA_OPTS= -Xms6g -Xmx6g  -Xmn3g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof -Xloggc:./logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10  -XX:GCLogFileSize=10M
2. 堆外內存限制(若 Netty 使用 Direct Buffer)
-XX:MaxDirectMemorySize=2g  # 限制堆外內存,默認與 -Xmx 相同

以下是每個參數的詳細解釋及其作用:


1.?-Xms6g?和?-Xmx6g

  • 含義

    • -Xms6g:設置 JVM?堆內存的初始大小為 6GB。

    • -Xmx6g:設置 JVM?堆內存的最大大小為 6GB。

  • 作用

    • 將堆的初始值和最大值設為相同,避免堆動態擴展時的性能開銷

    • 6GB 的堆大小適用于需要處理高并發或大數據的應用場景。

  • 注意事項

    • 若堆內存不足(OOM 錯誤),需結合應用需求適當增大?-Xmx,但需考慮物理內存限制。


2.?-Xmn3g

  • 含義

    • 設置?新生代(Young Generation)的大小為 3GB。

  • 作用

    • 新生代是對象初次分配的區域,較大的新生代可減少對象過早晉升到老年代(Old Generation)的頻率。

    • 默認新生代與老年代比例為?1:2(如?-Xmn3g?時,老年代為?6g - 3g = 3g)。

  • 調優場景

    • 適合短生命周期對象較多的應用(如 Web 請求的臨時對象),減少 Full GC 頻率。


3.?-XX:MetaspaceSize=256m?和?-XX:MaxMetaspaceSize=1g

  • 含義

    • MetaspaceSize:設置?元空間(Metaspace)的初始大小為 256MB。

    • MaxMetaspaceSize:設置?元空間的最大大小為 1GB。

  • 作用

    • 元空間用于存儲類的元數據(如類信息、方法字節碼),取代 Java 8 之前的永久代(PermGen)。

    • 設置初始大小避免頻繁的元空間動態擴展;設置上限防止元空間無限膨脹(如類加載器泄漏)。

  • 注意事項

    • 若應用頻繁加載/卸載類(如動態代理),需適當增大?MaxMetaspaceSize


4.?-XX:+UseG1GC

  • 含義

    • 啟用?G1(Garbage-First)垃圾回收器

  • 作用

    • G1 是面向大堆(>4GB)的垃圾回收器,通過分代和分區(Region)策略,平衡吞吐量和低延遲。

    • 特點:

      • 并發標記:與用戶線程并行執行部分 GC 操作。

      • 可預測停頓:通過?MaxGCPauseMillis?控制目標停頓時間。

      • 混合回收:在回收新生代時,同時回收部分老年代。


5.?-XX:MaxGCPauseMillis=200

  • 含義

    • 設置 G1 垃圾回收器的?目標最大停頓時間為 200 毫秒。

  • 作用

    • G1 會盡量調整 GC 策略(如每次回收的 Region 數量)以滿足該目標。

    • 較小的值(如 50ms)會減少單次 GC 停頓時間,但可能增加 GC 頻率。

  • 注意事項

    • 這是一個“軟目標”,JVM 會盡力達成,但不保證絕對不超過。


6.?-XX:+ParallelRefProcEnabled

  • 含義

    • 啟用?并行處理引用對象(如軟引用、弱引用、虛引用、Finalizer)。

  • 作用

    • 加速引用對象的處理,減少 Full GC 的停頓時間。

    • 默認情況下,引用處理是單線程的,可能成為 Full GC 的瓶頸。


7.?-XX:+HeapDumpOnOutOfMemoryError?和?-XX:HeapDumpPath=./heapdump.hprof

  • 含義

    • HeapDumpOnOutOfMemoryError:在發生 OOM 時自動生成堆轉儲(Heap Dump)。

    • HeapDumpPath:指定堆轉儲文件的保存路徑(如?./heapdump.hprof)。

  • 作用

    • 堆轉儲是內存快照,用于分析 OOM 時的內存占用情況(如內存泄漏)。

    • 默認路徑為當前工作目錄,建議指定固定目錄(如?./logs)。


8.?-Xlog:gc*,gc+heap=debug:file=./logs/gc.log:time,uptimemillis:filecount=10,filesize=10M

  • 含義

    • 配置詳細的?GC 日志輸出

  • 參數分解

    • gc*:記錄所有 GC 事件。

    • gc+heap=debug:啟用堆內存變化的調試信息。

    • file=./logs/gc.log:日志文件路徑。

    • time,uptimemillis:日志中顯示時間戳和 JVM 啟動后的毫秒數。

    • filecount=10,filesize=10M:保留最多 10 個日志文件,每個文件最大 10MB。

  • 作用

    • 通過 GC 日志分析 GC 頻率、停頓時間、內存回收效率。

    • 示例日志片段:

      復制

      下載

      [2023-10-01T12:34:56.789+0800][12345ms] GC(0) Pause Young (Normal) 2048M->512M(6144M) 50ms

9.?-XX:MaxDirectMemorySize=2g

  • 含義

    • 設置 JVM?堆外內存(Direct Memory)的最大大小為 2GB。

  • 作用

    • 堆外內存由?ByteBuffer.allocateDirect()?或 Netty 的?PooledByteBuf?分配,不經過 GC 管理。

    • 默認值為?-Xmx(即與堆內存相同),顯式設置可防止堆外內存泄漏導致系統崩潰。

  • 注意事項

    • Netty 等 NIO 框架大量使用堆外內存,需結合應用實際需求調整此值。


參數分類總結

類別參數示例核心作用
堆內存-Xms6g -Xmx6g -Xmn3g控制堆大小及分代比例
元空間-XX:MetaspaceSize=256m管理類元數據內存
垃圾回收器-XX:+UseG1GC選擇高效低延遲的 GC 算法
GC調優-XX:MaxGCPauseMillis=200平衡吞吐量和停頓時間
診斷工具-XX:+HeapDumpOnOutOfMemoryError捕獲 OOM 時的內存快照
日志與監控-Xlog:gc*...記錄 GC 行為供后續分析
堆外內存-XX:MaxDirectMemorySize=2g防止堆外內存泄漏

最終建議

  1. 監控驗證

    • 部署后使用?jstatjcmd?或 VisualVM 實時監控內存和 GC 行為。

    • 檢查 GC 日志中 Full GC 的頻率和耗時。

  2. 堆轉儲分析

    • 若再次發生 OOM,使用 MAT 分析?heapdump.hprof,重點關注?Retained Heap?最大的對象。

  3. Netty 專項檢查

    • 添加?-Dio.netty.leakDetection.level=PARANOID?參數,啟用 Netty 內存泄漏檢測。

    • 確保所有?ByteBuf?通過?release()?釋放。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85412.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WSL2 安裝與Docker安裝

注意:如沒有科學上網請勿嘗試,無法判斷是否會因網絡錯誤導致的安裝失敗!!! WSL2(Windows Subsystem for Linux 2) 功能簡介: WSL2 是微軟提供的在 Windows 上運行完整 Linux 內核的…

Redis的安裝與使用

網址:Spring Data Redis 安裝包:Releases tporadowski/redis GitHub 解壓后 在安裝目錄中打開cmd 打開服務(注意:每次客戶端連接都有先打開服務!!!) 按ctrlC退出服務 客戶端連接…

springboot-響應接收與ioc容器控制反轉、Di依賴注入

1.想將服務器中的數據返回給客戶端,需要在controller類上加注解:ResponseBody; 這個注解其實在前面已經使用過,RestController其實就包含兩個注解: Controller ResponseBody 返回值如果是實體對象/集合,將會轉換為j…

將材質球中的紋理屬性對應的貼圖保存至本地

通過Texture2D的EncodeToPNG方法將紋理轉為圖片形式 material.GetTexture方法通過屬性名獲取紋理貼圖 material.SetTexture方法通過屬性名設置紋理貼圖 屬性名可在shader代碼中查看 using UnityEngine; using System.IO;public class TextureSaver : MonoBehaviour {public…

MySQL半同步復制配置和參數詳解

目錄 1 成功配置主從復制 2 加載插件 3 半同步復制監控 4 半同步復制參數 1 成功配置主從復制 操作步驟參考:https://blog.csdn.net/zyb378747350/article/details/148309545 2 加載插件 #主庫上 MySQL 8.0.26 之前版本: mysql>INSTALL PLUGIN rpl_semi_syn…

【筆記】Windows 成功部署 Suna 開源的通用人工智能代理項目部署日志

#工作記錄 本地部署運行截圖 kortix-ai/suna: Suna - 開源通用 AI 代理 項目概述 Suna 是一個完全開源的 AI 助手,通過自然對話幫助用戶輕松完成研究、數據分析等日常任務。它結合了強大的功能和直觀的界面,能夠理解用戶需求并提供結果。其強…

PCB制作入門

文章目錄 1 嘉立創使用旋轉 2元器件選擇MP2315SLM7815與LM7915 1 嘉立創使用 旋轉 空格旋轉 2元器件選擇 MP2315S MP2315S 是一款內置功率 MOSFET 的高效率同步整流降壓開關變換器。 其輸入電壓范圍為 4.5V 至 24V ,能實現 3A 連續輸出電流,負載與…

2025——》NumPy中的np.logspace使用/在什么場景下適合使用np.logspace?NumPy中的np.logspace用法詳解

1.NumPy中的np.logspace使用: 在 NumPy 中,np.logspace函數用于生成對數尺度上等間距分布的數值序列,適用于科學計算、數據可視化等需要對數間隔數據的場景。以下是其核心用法和關鍵細節: 一、基礎語法與參數解析: numpy.logspace(start, stop, num=50, endpoint=True, ba…

Java實現中文姓名轉拼音生成用戶信息并寫入文件

中文姓名轉拼音 Java實現中文姓名轉拼音生成用戶信息并寫入文件(shili域名版)一、項目背景與功能簡介二、技術棧與核心組件2.1 主要技術2.2 功能模塊 三、核心代碼解析3.1 主函數邏輯(流程控制)3.2 拼音轉換模塊(核心功…

Google car key:安全、便捷的汽車解鎖新選擇

有了兼容的汽車和 Android 手機,Google car key可讓您將Android 手機用作車鑰匙。您可以通過兼容的 Android 手機鎖定、解鎖、啟動汽車并執行更多功能。但是,Google car key安全嗎?它是如何工作的?如果我的手機電池沒電了怎么辦&a…

如何輕松將 iPhone 備份到外部硬盤

當您的iPhone和電腦上的存儲空間有限時,您可能希望將iPhone備份到外部硬盤上,這樣可以快速釋放iPhone上的存儲空間,而不占用電腦上的空間,并為您的數據提供額外的安全性。此外,我們還提供 4 種有效的解決方案&#xff…

AI煉丹日志-22 - MCP 自動操作 Figma+Cursor 自動設計原型

MCP 基本介紹 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一種開放協議,旨在標準化應用程序向大型語言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 應用程序的 USB-C 接口。就像 USB-C 提供了一種…

機器學習-線性回歸基礎

一、什么是回歸 依據輸入x寫出一個目標值y的計算方程,求回歸系數的過程就叫回歸。簡言之:根據題意列出方程,求出系數的過程就叫做回歸。 回歸的目的是預測數值型的目標值y,分類的目的預測標稱型的目標值y。 二、線性回歸 2.1線性…

解決RAGFlow(v0.19.0)有部分PDF無法解析成功的問題。

ragflow版本為:v0.19.0 1.解析的時候報錯:Internal server error while chunking: Coordinate lower is less than upper。 看報錯懷疑是分片的問題,于是把文檔的切片方法中的“建議文本塊大小”數值(默認512)調小&…

【前端】html2pdf實現用前端下載pdf

npm安裝完后&#xff0c;編寫代碼。 <template><div id"pdf-content">需要被捕獲為pdf的內容</div> </template><script> import html2pdf from html2pdf.js;export default {methods: {downloadPdf() {const element document.getE…

從零實現富文本編輯器#4-瀏覽器選區模型的核心交互策略

先前我們提到了&#xff0c;數據模型的設計是編輯器的基礎模塊&#xff0c;其直接影響了選區模塊的表示。選區模塊的設計同樣是編輯器的基礎部分&#xff0c;編輯器應用變更時操作范圍的表達&#xff0c;就需要基于選區模型來實現&#xff0c;也就是說選區代表的意義是編輯器需…

數論——質數和合數及求質數

質數、合數和質數篩 質數和合數及求質數試除法判斷質數Eratosthenes篩選法&#xff08;埃氏篩&#xff09;線性篩&#xff08;歐拉篩&#xff09; 質數有關OJ列舉P1835 素數密度 - 洛谷簡單的哥赫巴德猜想和cin優化 質數和合數及求質數 一個大于 1 的自然數&#xff0c;除了 1…

多商戶系統源碼性能調優實戰:從瓶頸定位到高并發架構設計!

在電商業務爆發式增長的今天&#xff0c;多商戶系統作為支撐平臺方、入駐商家和終端消費者的核心樞紐&#xff0c;其性能表現直接決定了商業變現效率。當你的商城在促銷期間崩潰&#xff0c;損失的不僅是訂單&#xff0c;更是用戶信任。 本文將深入剖析多商戶系統源碼性能優化的…

JDBC連不上mysql:Unable to load authentication plugin ‘caching_sha2_password‘.

最近為一個spring-boot項目下了mysql-9.3.0&#xff0c;結果因為mysql版本太新一直報錯連不上。 錯誤如下&#xff1a; 2025-06-01 16:19:43.516 ERROR 22088 --- [http-nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispat…

超標量處理器設計6-指令解碼

1. 指令緩存 指令緩存本質上是一個FIFO, 它能夠將指令按照程序中指定的順序存儲起來&#xff0c;這樣指令在解碼的時候&#xff0c;仍然可以按照程序中指定的順序進行解碼。指令緩存是超標量處理器中必須的部件&#xff0c;其原因有兩個&#xff1a; 1. 每周期可以取指的個數大…