性能测试全栈笔记:55.Java线程监控-1(jvm和jstack工具讲解)
从本章开始,逐渐进入性能调优阶段,需先打好基础,包含: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两个工具的使用,下节用一个例子来实际操作一下。