JVM调优的方法是什么
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"JVM调优的方法是什么",在日常操作中,相信很多人在JVM调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JVM调优的方法是什么"的疑惑
千家信息网最后更新 2026年11月01日JVM调优的方法是什么
这篇文章主要介绍"JVM调优的方法是什么",在日常操作中,相信很多人在JVM调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JVM调优的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
了解JVM常用命令行参数
标准:-开头,所有HotSpot都支持
非标准:-X开头,特点版本HotSpot支持特定的命令
不稳定:-XX开头,下个版本可能会取消的命令
java -version
java -X
调优代码:
public class OomTest {public static void main(String[] args) {Listbytes= new ArrayList<>(); for(;;){byte[] b=new byte[1024*1024];bytes.add(b);}}}JDK14java -XX:+PrintCommandLineFlags OomTest.java-XX:G1ConcRefinementThreads=8 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GCException in thread "main" java.lang.OutOfMemoryError: Java heap spaceJDK8java -XX:+PrintCommandLineFlags OomTest.java-XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
GC 垃圾回收器模式选择
科学计算:吞吐量,数据挖掘,吞吐量优先的一般选择:PS+PO
响应时间:网站,API G1
什么是调优?(搞定了就重启一次)
依据需求进行JVM规划和预调优
优化运行JVM环境(慢,卡顿)
解决JVM运行过程中出现的各种问题(OOM)
调优,从规划开始
调优,从业务场景开始,没有场景调优都是耍流氓
无监控,不调优
步骤
熟悉业务场景
响应时间,停顿时间【CMS,G1 ZGC】(需要给用户做响应)
吞吐量=用户/(用户时间+GC时间)【PS PO-默认】
选择回收器组合
计算内存需求
选定CPU(越高越好)
设定年代大小,升级年龄
设定日志参数
观察日志情况
通过top jstack 找出堆栈信息
# 第一步先top 找出 哪个java进程占用率最高top#显示如下PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND24525 root 20 0 4909144 1.421g 6248 S 6.7 18.6 67:52.53 jsvc# 第二步 使用top -Hp Pid 找出这个pid进程里哪个线程占用率最高top -Hp 24525显然如下:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND24624 root 20 0 4917660 1.427g 14548 S 2.7 18.7 0:30.39 jsvc# 第三步使用jstack查找改进程的堆栈信息,需要把top -Hp的PID转换成16进制printf '%x\n' 24624 输出:66030# 使用jstack -l pid(进程的)|grep 16进制(top- Hp线程PID)查找堆栈jstack -l 24525 |grep 66030输出堆栈信息,结合源码进行原因查找使用jmap分析java进程的内存占用分析使用jmap会导致系统STWjmap -histo 进程ID |head 20jmap -dump:format=b,file=xxx pid /jmap -histo
工具:阿里arthas工具使用
java -jar arthas-boot.jar按数组选择java进程# 常用命令有1. dashboard :类似top命令实时检控线程情况2. jvm :把当前java进程的jvm配置全部显示出来(栈,堆内存等等info)3. thread 可以跟个线程ID:查看所有线程列表信息,后面跟着线程ID,4. heapdump : 导出堆内存情况,会导致stw使用jhat -J-mx512M xxx.hprof5. redefine 热替换,线上直接替换文件
实际线上运行的jvm参数(jdk8用的G1,堆内存最大512m)
#!/bin/bashSERVER_NAME=xx-xx-serverBUILD_NAME=master-202003042222-13cae098aBASE_DIR=/usr/local/xx/xxx-web-serverexec java \-Dfile.encoding=UTF-8 \-Dlogback.configurationFile=${BASE_DIR}/conf/logback.xml \-Xmx512m \-XX:+UseG1GC \-XX:MaxGCPauseMillis=100 \ # gc的清理间隔时间-XX:InitiatingHeapOccupancyPercent=35 \ # 启动G1的堆空间占用比例-verbose:gc \ # 类加载详细过程-XX:+PrintGCDetails \ # GC详情-XX:+PrintGCDateStamps \ # 打印gc启动时间的相对时间-XX:+PrintGCTimeStamps \ # 打印发送GC的时间-XX:+PrintGCApplicationStoppedTime \ #打印GC的stw停止时间-Xloggc:${BASE_DIR}/logs/jvm_gc.log \ #打印GClog-XX:ErrorFile=${BASE_DIR}/logs/jvm_err.log \ #打印Gc报错log-XX:+HeapDumpOnOutOfMemoryError \ # 导出oom异常对dump异常快照-XX:HeapDumpPath=${BASE_DIR}/logs/jvm_dump_pid%p.hprof \-jar ${BASE_DIR}/bin/xxx-xx-server-${BUILD_NAME}.jar ${BASE_DIR}/conf/server.properties
到此,关于"JVM调优的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
时间
进程
线程
方法
内存
命令
信息
堆栈
学习
选择
参数
吞吐量
场景
开头
情况
用户
吞吐
运行
最高
业务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
哈尔滨大商圈互联网科技有限公司
互联网科技的
狮子座互联网科技
互联网与新科技
杭州互联网科技公司
成都互联网科技公司
狮子座互联网科技有限公司
互联网金融科技平台
盛创互联网科技有限公司
成都玖崟互联网科技有限公司乐商圈怎么样
北京三清互联网科技
西藏七维空间互联网科技有限公司
深圳前海聚择互联网科技有限公司
阿里互联网科技公司
互联网金融中的现代科技
洛阳昕诺飞互联网科技有限公司
中国科技创新与世界互联网大会
互联网风格科技公司名称
山东蛋芒互联网科技有限公司
湖北九亚互联网络科技有限公司
亿人帮互联网科技有限公司
互联网科技的英文
互联网科技缩写
卫星互联网科技股票
晋城互联网科技
保险科技服务互联网营销体系
山东子淼互联网科技有限公司
安徽零酒互联网科技有限公司
杭州融税互联网科技有限公司