性能测试全栈笔记:55.Java线程监控-1(jvm和jstack工具讲解)

作者: admin 分类: 性能专题 发布时间: 2022-03-08 23:58

从本章开始,逐渐进入性能调优阶段,需先打好基础,包含:java线程、jvm虚拟机、垃圾回收机制等知识

一、认识java线程的五种状态:

  • 新建:new
  • 运行:runnable
  • 等待:waitting(无限期等待)、timed waitting(限期等待)
  • 阻塞:blocked
  • 结束:terminated

重点关注:timed waitting、blocked

二、熟悉java线程监控的两种工具

1.jvisualvm工具

说明:可视化工具,可监控设备cpu、内存、线程、类的加载情况,可进行堆dump,以及线程dump,可供性能分析

界面长这个样子:

1.1.jvm工具来自哪里?

来自:jdk(比如:C:\Program Files\Java\jdk1.8.0_202\bin)

1.2.如何将设备与jvm相连?

需要添加监控参数(一般只适合内部测试使用):

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10086 -
Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.authenticate=false -
Djava.rmi.server.hostname=ip地址"

上述解析:

  • 10086:允许解析的端口(端口需开放且未被占用:netstat -anp |grep 10086
  • ssl:是否进行SSL加密,一般为false
  • authenticate:授权(需配账号密码,适用灰度测试,一般为false)
  • ip地址:当前tomcat机器ip地址

1.3.参数放到哪里?

放到:/tomcat/bin/catalina.sh中

注意:放之前需要咨询开发tomcat执行顺序,一般放在最前面就行

然后保存并退出,如果期间不经意动到什么,这个时候先退出来,不要保存,再次进行编辑,这样比较保险

1.4.再关闭防火墙:

systemctl status firewalld

1.5.开始连接

1)选择远程,右键点击,填写远程地址

2)选择ip,右键点击,填写监听端口

最后,呈现出来的就是开始我们看到的那样

用一个例子来模拟上面的几种线程状态,首先下载jar包:thread-test.jar

2.jstack工具(一般用于生产环境)

截取线程实时状态,相当于快照,用法:jstack pid(pid:进程号)

其中,ajp-nio-8009-Acceptor-0:线程名;prio=5:优先级;tid=0x00007f8bd44df800:jvm线程id,唯一标识;nid=0x4a0:对应系统线程id,和top命令查出的一致,nid是16进制。(进制转换:在线进制转换在线进制转换器 | 菜鸟工具

查看进程下所有线程的详细信息:top -H -p pid(比如:top -H -p 912

java.lang.Thread.State: RUNNABLE:线程状态

也可以将快照输出:jstack -l 5436 > 5436.log,方便下载查看(一定要多拍几次,至少3次以上,找到调用关系)

-l表示输出更多信息

本节主要介绍jvm和jstack两个工具的使用,下节用一个例子来实际操作一下。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复