监控指标解读和JVM 分析&调优

举报
yd_249383650 发表于 2023/03/12 14:15:04 2023/03/12
【摘要】 ​1、中间件指标​编辑 当前正在运行的线程数不能超过设定的最大值。一般情况下系统性能较好的情况下,线 程数最小值设置 50 和最大值设置 200 比较合适。 当前运行的 JDBC 连接数不能超过设定的最大值。一般情况下系统性能较好的情况下,JDBC 最小值设置 50 和最大值设置 200 比较合适。 GC频率不能频繁,特别是 FULL GC 更不能频繁,一般情况下系统性能较好的情况下,...

1、中间件指标

编辑

 当前正在运行的线程数不能超过设定的最大值。一般情况下系统性能较好的情况下,线 程数最小值设置 50 和最大值设置 200 比较合适。

 当前运行的 JDBC 连接数不能超过设定的最大值。一般情况下系统性能较好的情况下,

JDBC 最小值设置 50 和最大值设置 200 比较合适。

 GC频率不能频繁,特别是 FULL GC 更不能频繁,一般情况下系统性能较好的情况下,

JVM 最小堆大小和最大堆大小分别设置 1024M 比较合适。

2、数据库指标 

编辑

 SQL 耗时越小越好,一般情况下微秒级别。

 命中率越高越好,一般情况下不能低于 95%。

 锁等待次数越低越好,等待时间越短越好。

压测内容 压测线程数 吞吐量/s 90%响应时间 99%响应时间
Nginx 50 2335 11 944
Gateway 50 10367 8 31
简单服务 50 11341 8 17
首页一级菜单渲染 50 270(db,thymeleaf) 267 365
首页渲染(开缓存) 50 290 251 365
首页渲染(开缓存、
优化数据库、关日
志)
50 700 105 183
三级分类数据获取 50 2(db)/8(加索引) ... ..
三级分类(优化业
务)
50 111 571 896
三级分类(使用
redis作为缓存)
50 411 153 217
首页全量数据获取 50 7(静态资源)
Gateway+简单服务 50 3126 30 125
全链路 50 800 88 310


 中间件越多,性能损失越大,大多都损失在网络交互了;

 业务:

 Db(MySQL 优化)

 模板的渲染速度(缓存)

 静态资源

5、JVM 分析&调优 

 jvm 调优,调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了, 保证服务的稳定,gc 永远会是 Java 程序员需要考虑的不稳定因素之一复杂和高并发下的 服务,必须保证每次 gc 不会出现性能下降,各种性能指标不会出现波动,gc 回收规律而且干净,找到合适的 jvm 设置。Full gc 最会影响性能,根据代码问题,避免 full gc 频率。可以 适当调大年轻代容量,让大对象可以在年轻代触发 yong gc,调整大对象在年轻代的回收频 次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间;

1、几个常用工具

编辑

2、命令示例 

 jstat 工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。 使用时,需加上查看进程的进程 id,和所选参数。

jstat -class pid: 显示加载 class 的数量,及所占空间等信息

jstat -compiler pid: 显示 VM 实时编译的数量等信息。

jstat -gc pid :可以显示 gc 的信息,查看 gc 的次数,及时间

jstat -gccapacity pid: 堆内存统计,三代(young,old,perm)内存使用和占用大小

jstat -gcnew pid: 新生代垃圾回收统计

jstat -gcnewcapacity pid: 新生代内存统计

jstat -gcold pid: 老年代垃圾回收统计

除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6 是 每 250 毫秒打印一次,一共打印 6 次,还可以加上-h3 每三行显示一下标题。 

jstat -gcutil pid 1000 100 : 1000ms 统计一次 gc 情况统计 100 次; 

 在使用这些工具前,先用 JPS 命令获取当前的每个 JVM 进程号,然后选择要查看的 JVM。

jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括 Java System 属性和 JVM 命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩 溃时,jinfo 可以从 core 文件里面知道崩溃的 Java 应用程序的配置信息

jinfo pid :输出当前 jvm 进程的全部参数和系统属性

jinfo -flag name pid: 可以查看指定的 jvm 参数的值;打印结果:-无此参数,+有

jinfo -flag [+|-]name pid: 开启或者关闭对应名称的参数(无需重启虚拟机)

jinfo -flag name=value pid: 修改指定参数的值

jinfo -flags pid :输出全部的参数

jinfo -sysprops pid :输出当前 jvm 进行的全部的系统属性

jmap 可以生成 heap dump 文件,也可以查看堆内对象分析内存信息等,如果不使用这个命 令,还可以使用-XX:+HeapDumpOnOutOfMemoryError 参数来让虚拟机出现 OOM 的时候自动 生成 dump 文件。 


jmap -dump:live,format=b,file=dump.hprof pid

dump 堆到文件,format 指定输出格式,live 指明是活着的对象,file 指定文件名。eclipse 可 以打开这个文件

jmap -heap pid

打印 heap 的概要信息,GC 使用的算法,heap 的配置和使用情况,可以用此来判断内存目 前的使用情况以及垃圾回收情况

jmap -finalizerinfo pid 打印等待回收的对象信息

jmap -histo:live pid 打印堆的对象统计,包括对象数、内存大小等。jmap -histo:live 这个 命令执行,JVM 会先触发 gc,然后再统计信息

jmap -clstats pid

打印 Java 类加载器的智能统计信息,对于每个类加载器而言,对于每个类加载器而言,它 的名称,活跃度,地址,父类加载器,它所加载的类的数量和大小都会被打印。此外,包含 的字符串数量和大小也会被打印。

-F 强制模式。如果指定的 pid 没有响应,请使用 jmap -dump 或 jmap -histo 选项。此 模式下,不支持 live 子选项。

jmap -F -histo pid

jstack 是 jdk 自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆 栈信息。

jstack pid 输出当前 jvm 进程的全部参数和系统属性

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。