tocmat 启动怎么设置 jvm和gc

在生产环境中部署 Java Web 应用时,我们经常需要给 Tomcat 设置 JVM 参数和 GC 策略,以提高性能、稳定性和可观察性。以下是完整教程:


一、Tomcat 设置 JVM 启动参数的方式

1. 修改 startup 脚本(推荐)

Linux 系统下的 Tomcat 9 为例,修改 bin/catalina.sh 脚本:

在文件头部(JAVA_OPTS 或新定义)添加:

# JVM 参数配置
JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"# GC 策略(根据 JDK 版本选择)
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=100"# 日志 & 可观测性(可选)
JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcat/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

然后运行 bin/startup.sh 即可生效。


2. 设置 setenv.sh(推荐方式)

在 Tomcat 的 bin 目录下新建一个文件 setenv.sh(Windows 为 setenv.bat):

#!/bin/bash# JVM 启动参数(可以换成你自己的配置)
JAVA_OPTS="-Xms2g -Xmx2g -Xmn512m -XX:+UseG1GC -XX:MaxGCPauseMillis=100"
JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcat/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

注意:

  • setenv.shcatalina.sh 自动读取,推荐用这个文件管理配置。
  • setenv.sh 的权限必须为可执行:chmod +x setenv.sh

二、根据 JDK 版本选择 GC 策略

JDK版本默认 GC推荐 GC(手动指定)
JDK8Parallel GCG1GC:-XX:+UseG1GC
JDK11G1GCG1GC 或 ZGC(实验性)
JDK17G1GCZGC(低延迟场景)

示例:

# JDK8 推荐参数(G1)
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=100"# JDK17 启用 ZGC(超低延迟业务)
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseZGC"

三、常见 JVM 参数说明

参数含义
-Xms2g / -Xmx2g初始/最大堆大小
-Xmn512m年轻代大小
-XX:+UseG1GC使用 G1 垃圾回收器
-XX:MaxGCPauseMillis=100G1 最大停顿时间目标(毫秒)
-XX:MetaspaceSize=128m元空间初始大小
-XX:MaxMetaspaceSize=256m元空间最大大小
-Xloggc:gc.logGC 日志路径
-XX:+PrintGCDetails打印 GC 详情
-XX:+PrintGCDateStamps打印 GC 时间戳

四、检查是否生效

ps -ef | grep tomcat

查看启动命令中是否包含你配置的 -Xmx, -XX:+UseG1GC 等。

或者在 Tomcat 管理台访问 /manager 界面,查看 JVM 状态。


五、建议

  • 堆大小设置不要超过服务器物理内存的 60~70%
  • GC 日志建议开启,并定期分析
  • 使用 jstat, jmap, jvisualvm, Arthas 等工具动态监控
  • 建议业务高峰期进行压测和 GC 调优验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zuoyyyeee

实验拓扑图 需求分析 1.分配接口ip 2.使用OSPF协议使三台路由器可达 3.在路由器1,2 /4,5 使用直连接口直接配置EBGP ip配置: [R1]: bgp 100 rid 1.1.1.1 peer 12.0.0.2 as-number 200 network 1.1.1.1 32 [R2]: bgp 200 rid 2.2.2.2 p…

‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)

‌Element UI 双击事件(cell-dblclick 与 row-dblclick) 一、核心双击事件绑定‌ 表格单元格双击‌ ‌事件绑定‌: 通过 cell-dblclick 监听单元格双击,接收四个参数(row, column, cell, event)。 ‌示…

Python爬虫实战:研究decrypt()方法解密

1. 引言 1.1 研究背景与意义 在当今数字化时代,网络数据蕴含着巨大的价值。然而,许多网站为了保护其数据安全和商业利益,会采用各种加密手段对传输的数据进行处理。这些加密措施给数据采集工作带来了巨大挑战。网络爬虫逆向解密技术应运而生,它通过分析和破解网站的加密机…

day014-服务管理

文章目录 1. 提问的方式1.1 注意事项1.2 start法则-提问/面试 2. systemctl 系统服务管理2.1 开启和自启动服务sshd2.2 关闭和永久禁用防火墙2.3 查看服务的状态2.4 重启服务2.5 sshd重启失败案例 3. localectl 字符集管理3.1 临时修改语言3.2 永久修改语言3.3 用脚本修改语言 …

【redis】CacheAside的数据不一致性问题

缓存的合理使用确提升了系统的吞吐量和稳定性,然而这是有代价的,这个代价便是缓存和数据库的一致性带来了挑战。 新增数据时,数据直接写入数据库,缓存中不存在对应记录。首次查询请求会触发缓存回填,即从数据库读取新…

DA14585墨水屏学习

一、do_min_word void do_min_work(void) {timer_used_min app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);current_unix_time time_offset;time_offset 60;// if (isconnected 1)// {// GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_PIN);// …

微服务调试问题总结

本地环境调试。 启动本地微服务,使用公共nacos配置。利用如apifox进行本地代码调试解决调试问题。除必要的业务微服务依赖包需要下载到本地。使用mvn clean install -DskipTests进行安装启动前选择好profile环境进行启动,启动前记得mvn clean清理项目。…

C#学习第22天:网络编程

网络编程的核心概念 1. 套接字(Sockets) 定义:套接字是网络通信的基本单元,提供了在网络中进行数据交换的端点。用途:用于TCP/UDP网络通信,支持低级别的网络数据传输。 2.协议 TCP(Transmiss…

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯(Ames)ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…

图像处理篇---opencv实现坐姿检测

文章目录 前言一、方法概述使用OpenCV和MediaPipe关键点检测角度计算姿态评估 二、完整代码实现三、代码说明PostureDetector类find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿评估标准(可进行参数调整):可视化功能&…

.Net HttpClient 使用代理功能

HttpClient 使用代理功能 实际开发中,HttpClient 通过代理访问目标服务器是常见的需求。 本文将全面介绍如何在 .NET 中配置 HttpClient 使用代理(Proxy)功能,包括基础使用方式、代码示例、以及与依赖注入结合的最佳实践。 注意…

【学习路线】 游戏客户端开发入门到进阶

目录 游戏客户端开发入门到进阶:系统学习路线与推荐书单一、学习总原则:从底层出发,项目驱动,持续迭代二、推荐学习路线图(初学者→进阶)第一阶段:语言基础与编程思维第二阶段:游戏开…

精益数据分析(57/126):创业移情阶段的核心要点与实践方法

精益数据分析(57/126):创业移情阶段的核心要点与实践方法 在创业的浩瀚征程中,每一个阶段都承载着独特的使命与挑战。今天,我们继续秉持共同进步的理念,深入研读《精益数据分析》,聚焦创业的首…

015枚举之滑动窗口——算法备赛

滑动窗口 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 原题链接 思路分析 见代码注解 代码 int maxSubArray(vector<int>& num…

微软系统 红帽系统 网络故障排查:ping、traceroute、netstat

在微软&#xff08;Windows&#xff09;和红帽&#xff08;Red Hat Enterprise Linux&#xff0c;RHEL&#xff09;等系统中&#xff0c;网络故障排查是确保系统正常运行的重要环节。 ping、traceroute&#xff08;在Windows中为tracert&#xff09;和netstat是三个常用的网络…

解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证

一、哲学维度的本体论批判 &#xff08;1&#xff09;理性主义的坍缩&#xff1a;从笛卡尔幻想到哥德尔陷阱 笛卡尔在《方法论》中构建的理性主义范式&#xff0c;企图通过"普遍怀疑-数学演绎"双重机制确立绝对方法体系。然而哥德尔不完备定理&#xff08;Gdel, 19…

【网络入侵检测】基于源码分析Suricata的IP分片重组

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全&#xff0c;欢迎关注与评论。 目录 目录 1.概要 2. 配置信息 2.1 名词介绍 2.2 defrag 配置 3. 代码实现 3.1 配置解析 3.1.1 defrag配置 3.1.2 主机系统策略 3.2 分片重组模块 3.2.1…

二分查找的边界问题

前言 二分查找(Binary Search)是一种高效的查找算法&#xff0c;时间复杂度为O(log n)。它适用于已排序的数组或列表。本文将详细介绍二分查找的两种常见写法&#xff1a;闭区间写法和左闭右开区间写法。 一、二分查找基本思想 二分查找的核心思想是"分而治之"&am…

重庆医科大学附属第二医院外科楼外挡墙自动化监测

1.项目概述 重庆医科大学附属第二医院&#xff0c;重医附二院&#xff0c;是集医疗、教学、科研、预防保健为一体的国家三级甲等综合医院。前身为始建于1892年的“重庆宽仁医院”。医院现有开放床位 1380张&#xff0c;年门诊量超过百万人次&#xff0c;年收治住院病人4.5万人…

【Redis实战篇】秒杀优化

1. 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单…