线程的五种状态
* 新建: new
* 运行: runnable
* 等待: waitting(无限期等待),timed waitting(限期等待)
* 阻塞: blocked
* 结束: terminated
线程的两种监控方法
一, jvisualvm, 图形界面的方式
监控之前先对 jvm 加监控参数, 在 tomcat 的 bin 目录下, catalina.sh 文件中, 第二行添加:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.0.0.9"
1 - 改 port
2 - 改 hostname 为本机 ip
如果想要监控和多个 tomcat, 则需要在每一个 tomcat 下都添加这行参数, 且端口号不重复
保存并重启 tomcat
查看 10086 的进程是否存在: netstat -an|grep 10086
或者
查看 10086 的使用详情: lsof -i:10086
windows_cmd 下, 输入 (前提, jdk 配好环境变量)
配置 ip
在监控的 ip 上右键_添加 JMX 连接
填写端口号
命令行执行 netstat -an|grep 10086
查看线程
二, jstack pid(进程号): 命令行方式, 打印当前所有的线程及执行状态
由于此命令会直接把内容展示在屏幕上, 不好查看, 所以最好重定向输出
如, 把结果打印到 a.log 文件里面: jstack 8743> a.log
每一段这种就是一个线程
构建几个场景看看
构造线程状态的 Java 脚本: java -jar thread-test.jar [1|2|3|4]
构造不同的状态的线程
- 1:runnable
- java -jar thread-test.jar 1
复制一个会话, 查看刚刚运行的 java 的进程
- 2:waitting
- java -jar thread-test.jar 2
- 3:timedWaitting
- java -jar thread-test.jar 3
- 4:blocked
- java -jar thread-test.jar 4
来源: http://www.bubuko.com/infodetail-2996756.html