目录
4.1.1 -XX:+DisableExplicitGC
4.2.2 -XX:+HeapDumpOnOutOfMemoryError
4.2.3 -XX=/home/tomcat_error_log/
注1:什么是tomcat manager-gui?配置文件参数的具体含义?
-XX:MetaspaceSize -XX:MaxMetaspaceSize
(注解内容为详细科普具体配置的含义)
一.开启tomcat内存监控
调试下(临时开启)tomcat manager-gui (注1)
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin-script"/>
<role rolename="admin-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="tests" password="123456" roles="manager,manager-gui,admin-script,admin-gui,manager-jmx,manager-script,manager-status"/>
访问:ip:8080/manager (如果无法正常显示的情况下)

需要注释/usr/local/tomcat/webapps/manager/META-INF/context.xml中指定配置。

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
因为默认只能本机访问,注释掉以后别的机器也可以访问了。
修改完成后登录ip:8080访问tomcat页面:

1.1 tomcat:8080展示界面
1.1.1 Server Status(服务器状态)
- 相当于汽车的"仪表盘"。
- 可以实时查看:内存使用量(像手机剩余内存)、当前访问人数(像店铺客流量)、服务器运行时间(像汽车里程表)。
- 主要用于检查服务器是否"健康"。
1.1.2 Manager App(应用管理)
- 相当于手机的"应用商店+任务管理器"。
- 功能包括:安装/卸载网站程序(像装APP)、启动/停止已部署的网站(像关闭后台程序)、查看所有运行中的网站。
- 日常用得最多的管理功能。
1.1.3 Host Manager(虚拟主机管理)
- 相当于房产中介的"钥匙串"。
- 管理多个网站域名(像管理不同房子的钥匙)。
- 可以:添加/删除域名绑定、设置默认网站、配置域名重定向。
- 一般只有服务器管理员需要操作。
1.1.4 补充说明
- 这三个按钮需要管理员账号密码才能操作。
- 普通用户访问网站时看不到这些按钮。
- 如果误操作可能导致网站下线,建议操作前备份数据。
针对调优目前我们主要使用server status查看内存使用及性能:

1.2 server status:
1.2.1 JVM内存区域与监控数据对照表
| 监控项名称 |
内存类型 |
相当于 |
功能说明 |
您的数据状态分析 |
|---|---|---|---|---|
| PS Eden Space |
堆内存(新生代) |
"工作台" |
新创建对象的存放区,频繁进行垃圾回收 |
使用率仅7%,内存非常充裕 |
| PS Old Gen |
堆内存(老年代) |
"仓库" |
存放长期存活对象,GC频率较低 |
1%使用率,几乎无压力 |
| PS Survivor Space |
堆内存(幸存区) |
"中转站" |
存放经过Minor GC后存活的对象 |
0%使用,说明近期未发生新生代GC |
| Code Cache(注2) |
非堆内存 |
"代码保险箱" |
存储JIT编译后的本地代码 |
接近上限(99%),建议监控 |
| Metaspace |
非堆内存 |
"说明书档案库" |
存放类元数据(Java 8+取代PermGen) |
使用率98%,需关注类加载情况 |
| Compressed Class |
非堆内存 |
"压缩版说明书" |
压缩存储的类指针信息 |
使用率极低,正常 |
1.2.2 关键配置参数对照
监控中的"初始化/总共/最大值"对应JVM启动参数:
-
-Xms初始堆大小 = Eden + Old + Survivor (1024+2731+170=3925MiB) 前三行分配4096的内存。 -
-Xmx最大堆大小 = 1067+2731+170=3968MiB -
-XX:MetaspaceSize=58.25MiB -
-XX:MaxMetaspaceSize=无限制(显示-0.00 MiB)
二.JVM内存配置优化(针对liunx)
在/apache-tomcat-9.0.107/bin下编辑catalina.sh并添加
(服务器64g内存情况下单个tomcat建议内存为4g)

JAVA_OPTS="-server -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=256m"
2.1 基础堆内存配置(注3:配置详解)
2.1.1 -server
启用服务器模式,针对多核CPU优化,提升长期运行性能13。
2.1.2 -Xms4096m
初始堆内存为4GB,JVM启动时立即分配的物理内存量14。
2.1.3 -Xmx4096m
最大堆内存为4GB,建议与-Xms相同以避免运行时动态调整带来的性能波动15。
2.2 元空间配置
2.2.1 -XX=256m
元空间初始容量256MB,存放类元数据信息(JDK8+替代PermGen)68。
2.2.2 -XX=512m
元空间上限512MB,防止类加载器泄漏导致内存无限增长68。
2.3 代码缓存配置
2.3.1 -XX=256m
JIT编译后本地代码的缓存区大小,影响热点代码执行效率9。
2.4 生产环境建议
- 堆内存配置需根据物理内存调整,通常Xms/Xmx设为物理内存50%-70%45
- 元空间推荐初始值256m,最大512m-1g(动态加载类多的应用需增大)
三.垃圾回收优化

JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=16 -XX:ConcGCThreads=4"
3.1 基础配置介绍
(注5配置信息详细解析)
-
-XX:+UseG1GC
启用G1垃圾回收器,适合多核大内存服务器,能减少GC停顿时间。 -
-XX:MaxGCPauseMillis=200
设定GC最大停顿时间为200毫秒,G1会尽量满足(非绝对保证),值越小回收越频繁。 -
-XX:ParallelGCThreads=4
并行GC线程数,默认按CPU核数计算(40核默认约25线程)。设为4表示强制限制为4线程,适合容器或低负载场景。 -
-XX:ConcGCThreads=2
并发GC线程数(如标记阶段),通常设为并行线程的1/4~1/2,避免抢占业务线程。
3.2 推荐配置(40核CPU场景)
基本我配置的都会比建议的稍微小一点,这个要根据实际生产环境cpu使用情况自行判断
3.2.1 通用服务器
-XX:ParallelGCThreads=16 # 物理核心数的50%
-XX:ConcGCThreads=4 # 并行线程的1/4
- 适用场景:混合型应用(Web服务、微服务),平衡GC效率和CPU利用率。
3.2.2 高吞吐应用
-XX:ParallelGCThreads=30 # 物理核心数的75%
-XX:ConcGCThreads=8
- 适用场景:大数据处理、计算密集型任务,优先减少GC时间。
3.2.3 容器环境
-XX:ParallelGCThreads=4 # 匹配容器vCPU配额
-XX:ActiveProcessorCount=4 # 显式声明可用CPU
- 关键点:避免JVM误读宿主机核心数。
3.3 调优建议
- 监控验证:通过
jstat -gc <pid>观察实际停顿时间,若MaxGCPauseMillis频繁超时,可适当增加并行线程数。 - 避免冲突:
ParallelGCThreads不宜超过物理核心数,否则会引发线程竞争。 - 关联参数:搭配
-Xmx设置堆内存(建议4G~32G),过小会导致频繁GC,过大会延长单次停顿
四.JVM参数及异常优化

JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/tomcat_error_log/"
4.1 基础配置
(注6:配置信息详细介绍)
4.1.1 -XX:+DisableExplicitGC
禁用显式调用System.gc(),防止代码中手动触发的垃圾回收干扰JVM自动回收机制。该参数可避免因显式GC导致的性能波动,但需确保应用不存在依赖手动GC的逻辑。
4.2.2 -XX:+HeapDumpOnOutOfMemoryError
当发生OutOfMemoryError时自动生成堆转储文件(Heap Dump),用于后续分析内存泄漏或对象占用情况。该参数是诊断OOM问题的关键工具。
4.2.3 -XX=/home/tomcat_error_log/
指定堆转储文件的保存路径(示例中为/home/tomcat_error_log/)。若未设置路径,默认生成在应用工作目录下,文件名格式为java_pid<pid>_<date>_<time>_heapDump.hprof。
4.2.4 综合建议
- 生产环境配置:建议同时启用
-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath,确保OOM时能快速定位问题。 - 注意事项:
-XX:+DisableExplicitGC需结合应用场景评估,若依赖第三方库可能调用System.gc()(如NIO框架),需谨慎启用。
五.连接器(Connector)调优
修改/apache-tomcat-9.0.107/conf/server.xml中的Connector配置

<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443"
maxThreads="3000"
minSpareThreads="600"
acceptCount="2100"
enableLookups="false"
compression="on"
compressionMinSize="2048"
#compressableMimeType="text/html,text/css,application/javascript,image/svg+xml"
compressibleMimeType="text/html,text/css,application/javascript,image/svg+xml"
URIEncoding="UTF-8"
connectionTimeout="30000"
高级配置
socket.bufferPool="4500"
socket.processorCache="3000"
socket.keyCache="3000"
socket.eventCache="3000"
socket.appReadBufSize="32768"
socket.appWriteBufSize="32768"
/>
5.1 基础配置介绍
5.1.1 基础网络配置
port="8080":服务监听端口,开发环境常用8080,生产环境建议改为80(HTTP)或443(HTTPS)
protocol="Http11NioProtocol":使用NIO非阻塞模型,适合高并发场景,性能优于传统BIO模式
redirectPort="8443":HTTP请求强制跳转HTTPS时的备用端口,生产环境建议改为443
线程池优化。(注7:介绍nio和bio区别)
maxThreads="500":最大工作线程数,推荐根据服务器核心数调整(公式:CPU核心数 * 200 ~ 500)。
minSpareThreads="50":最小空闲线程数,建议设为maxThreads的10%~20%。
acceptCount="300":等待队列长度,超过后拒绝请求,通常设为maxThreads的50%~70%。
5.2.2 性能增强参数
enableLookups="false":禁用DNS反向查询,避免网络延迟。
compression="on":启用GZIP压缩,减少传输数据量。
compressionMinSize="2048":仅压缩大于2KB的文件,平衡CPU消耗。
compressableMimeType:指定需压缩的文件类型,补充image/svg+xml可优化矢量图传输
编码与安全。(tomcat9.0之前的版本可以用这个参数)
compressibleMimeType(tomcat9.0之后的版本用这个参数约等于compressableMimeType)
URIEncoding="UTF-8":统一URL编码,避免中文乱码。
5.2 高级配置介绍
5.2.1 缓存池容量调整
(注8:参数详细介绍)
| 参数 | 原值 | 建议值 | 说明 |
|---|---|---|---|
socket.bufferPool |
500 | 4500 | 设为maxThreads的1.5倍 |
socket.processorCache |
500 | 3000 | 与maxThreads一致或设为-1 |
socket.keyCache |
500 | 3000 | 匹配并发线程数 |
socket.eventCache |
500 | 3000 | 避免事件对象频繁创建 |
appReadBufSize和appWriteBufSize调整
| 场景特征 | 推荐值 | 调整逻辑 |
|---|---|---|
| 高并发短连接(API服务) | 保持8KB | 避免内存浪费 |
| 大文件传输场景 | 32-64KB | 减少I/O次数提升吞吐量1 |
| 混合型业务 | 16-32KB | 平衡内存占用与性能 |
六.线程池配置

<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="80"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="true"
/>


最低0.47元/天 解锁文章

1091

被折叠的 条评论
为什么被折叠?



