JVM调优的方法是什么
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"JVM调优的方法是什么",在日常操作中,相信很多人在JVM调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JVM调优的方法是什么"的疑惑
千家信息网最后更新 2025年01月23日JVM调优的方法是什么
这篇文章主要介绍"JVM调优的方法是什么",在日常操作中,相信很多人在JVM调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JVM调优的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
了解JVM常用命令行参数
标准:-开头,所有HotSpot都支持
非标准:-X开头,特点版本HotSpot支持特定的命令
不稳定:-XX开头,下个版本可能会取消的命令
java -version
java -X
调优代码:
public class OomTest {
public static void main(String[] args) {
List
bytes= new ArrayList<>(); for(;;){
byte[] b=new byte[1024*1024];
bytes.add(b);
}
}
}
JDK14
java -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:+UseG1GC
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
JDK8
java -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+ COMMAND
24525 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+ COMMAND
24624 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会导致系统STW
jmap -histo 进程ID |head 20
jmap -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.hprof
5. redefine 热替换,线上直接替换文件
实际线上运行的jvm参数(jdk8用的G1,堆内存最大512m)
#!/bin/bash
SERVER_NAME=xx-xx-server
BUILD_NAME=master-202003042222-13cae098a
BASE_DIR=/usr/local/xx/xxx-web-server
exec 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安全错误
数据库的锁怎样保障安全
服务器通信设备管理器
传统关系型数据库技术的主要特点
苹果分布式数据库
阿里云香港服务器没有了
斐讯面试软件开发
vp服务器
软件开发试用期工资8折
wps的cad服务器
虚拟服务器安全设置
web项目连接数据库视频
武汉儿童网络安全
宿迁服务器机房
测量软件开发技术
软件开发属于会计什么行业
潜江定制软件开发公司
网络安全法律制度在
php连接数据库的技术
怎么避开qq网络安全
网络视频会议卡和服务器有关
飞贷复杂网络技术
澳洲软件开发专业qs排名
做软件开发被带到公安局
ios软件开发与mac开发
excle导入db2数据库中
手机小软件开发多少钱
西安美品多网络技术有限公司
中交集团网络安全师
怎么避开qq网络安全
必火网络安全学院官网
软件开发平台运营