JVM调优的方法是什么
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍"JVM调优的方法是什么",在日常操作中,相信很多人在JVM调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JVM调优的方法是什么"的疑惑
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
山西手机软件开发信息推荐
共享文件管理系统文件服务器
饥荒专用服务器神话书说
讯易通网络技术有限公司
河北工业大学网络安全学院
软件开发专业的就业前景如何
网络安全技术徐照兴
毁灭之刃服务器什么时候开始
网络技术的书哪些比较
sps22数据库出现乱码
网络技术的发展背景
数据库加当前时间
土地利用分类数据库
服务器硬盘有减震吗
点了注册但数据库没变化
编程从零开始学数据库
如何看待网络安全问题简短
网络安全演讲完整版
数据中心如何管理服务器
武汉网络安全实战培训
查找数据库耗时
磁铁放在服务器上会怎么样
松江区营销软件开发是真的吗
君华网络技术股东
对于维护国家网络安全
分析一下大学生网络安全的重要
培训机构网络安全事故
本地查询服务器配置
湖南软件开发多少钱
网络技术的发展英语翻译