当前位置: 首页 > article >正文

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() 释放。

相关文章:

Tomcat运行比较卡顿进行参数调优

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加参数 1. 初步调整参数(缓解问题) set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代,减少对象过早晋升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…...

java直接获取MyBatis将要执行的动态sql命令(不是拦截器方式)

目录 前言 一. 准备数据 1. 传输过来的json条件数据 2. mybatis 配置的动态sql 3. 想要的最终会执行的sql并返回给页面展示 二. 实现方式 三. 最终代码 前言 1.在平常开发过程中,MyBatis使用时非常多的,一般情况下我们只需要在控制台看看MyBatis输出的日志,要不就是实…...

C++四种类型转换方式

const_cast,去掉(指针或引用)常量属性的一个类型转换,但需要保持转换前后类型一致static_cast,提供编译器认为安全的类型转换(最常使用)reinterpret_cast,类似于c语言风格的强制类型转换,不保证安全;dynamic_cast,主要用于继承结构中&#xf…...

Canvas: trying to draw too large(256032000bytes) bitmap.

1、错误展示 测试了一下一张图片的显示,发现二个手机上测试的结果不一样,配制好一些的手机,直接就通过,但是屏小一些的测试手机上,直接报下面的错误。 这个意思是图片太大了,直接就崩了。 2、代码编写 lo…...

【深度学习-pytorch篇】5. 卷积神经网络与LLaMA分类模型

卷积神经网络与LLaMA分类模型 一、卷积操作基础 卷积是深度学习中用于提取局部特征的核心操作,特别适用于图像识别任务。 自定义二维卷积函数示例 以下函数实现了一个简化版的二维卷积: def convolve2D(image, kernel, padding0, strides1):kernel …...

matlab全息技术中的菲涅尔仿真成像

matlab全息技术中的菲涅尔仿真成像程序。 傅里叶法(重建距离得大)/Fresnel.m , 545 傅里叶法(重建距离得大)/FresnelB.m , 548 傅里叶法(重建距离得大)/Fresnel_solution.m , 1643 傅里叶法(重…...

基于对比学习的推荐系统开发方案,使用Python在PyCharm中实现

以下是一个基于对比学习的推荐系统开发方案,使用Python在PyCharm中实现。本文将详细阐述技术原理、系统设计和完整代码实现。 基于对比学习的推荐系统开发方案 一、技术背景与原理 1.1 对比学习核心思想 对比学习(Contrastive Learning)通过最大化正样本相似度、最小化负…...

网络协议之办公室网络是怎样的?

写在前面 本文来看下办公室网络怎样的。 1:正文 如果是在一个寝室中组件一个局域网还是比较简单的,只需要一个交换机,然后大家的电脑全部连接到这个交换机上就行了,之后所有的电脑设置CIDR保证在一个局域网就可以了。但是&#…...

鸿蒙OSUniApp PWA开发实践:打造跨平台渐进式应用#三方框架 #Uniapp

UniApp PWA开发实践:打造跨平台渐进式应用 前言 在过去的一年里,我们团队一直在探索如何利用UniApp框架开发高性能的PWA应用。特别是随着鸿蒙系统的普及,我们积累了不少有价值的实践经验。本文将分享我们在开发过程中的技术选型、架构设计和…...

uni-data-picker级联选择器、fastadmin后端api

记录一个部门及部门人员选择的功能,效果如下: 组件用到了uni-ui的级联选择uni-data-picker 开发文档:uni-app官网 组件要求的数据格式如下: 后端使用的是fastadmin,需要用到fastadmin自带的tree类生成部门树 &#x…...

8天Python从入门到精通【itheima】-62~63

目录 第六章开始-62节-数据容器入门 1.学习目标 2.为什么要学习数据容器? 3.什么是Python中的数据容器 4.小节总结 63节-列表的定义语法 1.学习目标 2.为什么需要列表? 3.列表定义的基本语法 4.列表定义的基本语法-案例演示 5.列表定义的基本语…...

运维 pgsql 安装完后某次启动不了

pgsql 安装完后某次启动不了 错误 data directory "/usr/local/postgresql/data" has invalid permissions 安装成功后一直可以 后面同事敲了 chmod -R 777 /usr/local 导致不行 改到了 /usr/local/postgresql/data 权限 /usr/local/postgresql/data的权限有限…...

Linux基本指令/下

目录 1.echo、cat与printf 2. > 操作符 与 >> 操作符 3. < 操作符 4.消息传送 linux文件深入 5.文件类型 6.mv命令 7.时间相关指令 8.查找命令 9.grep命令 10.zip/unzip/tar命令 11.scp命令 12.bc命令 13.uname 指令 14.快捷键大全 15.关机/重启/睡…...

matlab中绘图函数plot

MATLAB中的plot函数&#xff1a;数据可视化的强大工具 引言 在科学计算和工程领域&#xff0c;数据可视化是理解和分析数据的关键步骤。MATLAB作为一款强大的数值计算软件&#xff0c;提供了丰富的绘图功能&#xff0c;其中plot函数是最基础、最常用的二维图形绘制工具。本文…...

在线音乐服务器测试报告

1.项目背景 此项目主要用于模拟市面上主流的音乐软件的主要功能&#xff0c;提高自己的开发和测试能力。此项目采用的技术栈是SpringBoot MyBatis SpringMVC Mysql实现的&#xff0c;为了实现简单&#xff0c;方便测试&#xff0c;此项目没有注册功能&#xff0c;数据提前存…...

spark-AQE/Tungsten介绍及其触发条件

目录 1、简介2、AQE(自适应查询优化)触发条件及配置3、Tungsten(钨丝计划)触发条件及配置1、简介 AQE(Adaptive Query Execution) 定义:Spark 3.0引入的自适应查询优化技术,运行时动态调整执行计划。核心能力: 动态分区合并:自动合并小分区以减少Shuffle数据量。自动…...

leetcode-hot-100 (矩阵)

1、矩阵置零 题目链接&#xff1a;矩阵置零 题目描述&#xff1a;给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解答 方法一&#xff1a;使用一个二维数组 这是我看到这道题目的第一个想法&am…...

深度学习中常见的超参数对系统的影响

目录 一&#xff0c;学习率&#xff08;Learning Rate&#xff09; 1.1 学习率的本质&#xff1a;控制模型 “学习步伐” 的核心参数 1.2 学习率高低的具体影响&#xff1a;过犹不及的典型后果 1.3 学习率调整策略&#xff1a;3 个实用技巧 二&#xff0c;批次大小&#x…...

评标专家系统随机抽选 开发 Excel 中使用东方仙盟软件助理——未来之窗——仙盟创梦IDE

评标专家抽取系统是针对建设项目与采购招投标&#xff0c;从专家库中随机抽取参与评标专家&#xff0c;并自动进行语音通知的管理软件。符合《中华人民共和国招标投标法》及发改委颁布的《评标专家和评标专家库管理暂行办法》&#xff1b;操作简便、保密性强。 软件根据设定抽取…...

MySQL、PostgreSQL、Oracle 区别详解

MySQL、PostgreSQL、Oracle 区别详解 一、基础架构对比 1.1 数据库类型 MySQL:关系型数据库(支持NoSQL插件如MySQL Document Store)PostgreSQL:对象-关系型数据库(支持JSON等半结构化数据)Oracle:多模型数据库(关系型+文档+图+空间等)关键结论:PostgreSQL在数据类型…...

【第4章 图像与视频】4.6 结合剪辑区域来绘制图像

文章目录 前言示例 前言 本节将综合运用图像处理、离屏 canvas 以及剪辑区域等技术实现墨镜效果。 示例 主线程代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&qu…...

【Linux】Linux文件系统详解

目录 Linux系统简介 Linux常见发行版&#xff1a; Linux/windows文件系统区别 Linux文件系统各个目录用途 Linux系统核心文件 系统核心配置文件 用户与环境配置文件 系统运行与日志文件 Linux文件名颜色含义 Linux文件关键信息解析 &#x1f525;个人主页 &#x1f52…...

IDEA使用Git进行commit提交到本地git空间后撤回到commit版本之前

一、前言 Git作为最流行和最全面的版本控制工具&#xff0c;非常好用&#xff0c;但是操作也会比SVN复杂一些。毕竟有得有失嘛&#xff0c;所以我选择Git&#xff0c;最近在工作中&#xff0c;一不小心吧一些无关紧要的文件commit了。还好在Push之前看到&#xff0c;不过就算P…...

LangChain完全指南:从入门到精通,打造AI应用开发新范式

目录 1. 引言2. LangChain 框架概述3. 架构设计与模块划分4. 核心原理深度解析5. 工作流程与执行过程6. 扩展与定制7. 性能优化策略8. 实际应用案例9. 常见问题与解决方案10. 未来发展与展望11. 总结12. 参考文献与资源 1. 引言 1.1 LangChain 简介 LangChain 是一个开源的…...

深入解析Vue.js:构建现代Web应用的高效之道

一、Vue.js 的核心设计理念 Vue.js 以渐进式框架为定位,强调轻量灵活与易上手性,允许开发者根据项目需求逐步引入核心功能或扩展模块。其核心设计遵循以下原则: 响应式数据绑定:通过数据劫持(Object.defineProperty/Proxy)和发布 - 订阅模式,实现视图与数据的自动同步,…...

VS Code / Cursor 将默认终端设置为 CMD 完整指南

文章目录 &#x1f9ed; 适用范围&#x1f4cc; 背景与问题分析&#x1f6e0; 配置步骤1. 打开设置&#xff08;settings.json&#xff09;2. 添加或更新配置3. 重启终端与编辑器 &#x1f4a1; 补充&#xff1a;支持多个终端配置&#x1f9ef; 常见问题排查✅ 总结 在 Windows…...

mybatis plus的源码无法在idea里 “download source“

下载不了源码 如下&#xff1a; Souces not found for com.baomidou:mybatis-plus-extension 解决方案 运行 mvn dependency:resolve -Dclassifiersources 不知道啥作用&#xff0c;总之对我管用&#xff0c;在项目根目录运行即可&#xff0c;即根pom.xml的位置。...

移动安全Android——客户端数据安全

本地文件权限配置 测试流程 &#xff08;1&#xff09;手机运行待测APP应用&#xff0c;adb执行命令找到APP包名 adb shell dumpsys activity top|findstr ACTIVITY &#xff08;2&#xff09;adb shell 进入设备&#xff0c;以Root权限进入/data/data/package包名目录下 c…...

Python包管理器 uv替代conda?

有人问&#xff1a;python的包管理器uv可以替代conda吗? 搞数据和算法的把conda当宝贝&#xff0c;其他的场景能替代。 Python的包管理器有很多&#xff0c;pip是原配&#xff0c;uv是后起之秀&#xff0c;conda则主打数据科学。 uv替代pip似乎只是时间问题了&#xff0c;它…...

数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论&#xff08;十&#xff09;SQL 嵌套查询 超详细讲解&#xff08;附带例题表格对比带你一步步掌握&#xff09; 前言一、什么是嵌套查询&#xff1f;1. 基础组成&#xff1a;查询块2. 嵌套的两种常见位置&#xff08;1&#xff09;藏在 FROM 子句里&#xff08;当…...