目录
2.1 Jvisualvm JDK自带的
2.3 java Mission Control 简称JMC JDK1.8后自带
线程的基础定义与概念性的问题 这里就不复述了
今天主要讲线程的监视与多线程编程的优势和风险,我们用多线程有什么优点, 有什么风险。
其实优点很多都清楚 主要是关键是说不全,还是要记住的东西,记录下以便回顾吧 因为有些东西就算很明白了 长久不用也是会忘的
一 多线程的优势与风险
优势:
1 提高系统的吞吐率
2. 提高响应性
3. 充分利用多核处理器资源
4. 最小化对系统资源的使用
风险与难点
- 线程的安全问题
线程的理论与设计比较重要 不然容易出问题 难以排除
2 线程的活性问题
3 上下文切换
线程数量控制在多少可以减少上下文的切换,每个线程都有个上下背景文,里面有很多线程相关的信息,每次切换也是不断内存拷贝 次数过多也是很影响系统资源与性能的
4 可靠性
二 线程的监视
要灵活的运行好多线程还是很有技术考验的,线上真实的java系统运行时往往有上百个线程在运行,必要的监控与问题排查工具也是必不可少
获取与查看线程的转储(Thread Dump),一般线程转储是保存那一刻的该线程的线程信息
相关的工具
Jvisualvm,jstack, JMC, (linux)kill -3 PID , (windows)CTRL+ /, (linux)CTRL+break组合建
线程我们就来操作一遍 笔者是windows系统
Jvisualvm,jstack, JMC 是跟平台不相关的
2.1Jvisualvm查看Thread Dump
JDK自带
安装的JDK就有,直接在系统中搜索就可以,打开后的样子如下:
查看下我们IDEA的监控信息 可以看到守护线程和实际线程 44个
在
在应用程序下面有个线程DUMP 目前没挂过 dump不了
好吧要选中VsualVM即可 然后可以堆dump与线程dump
这里分析不展开了 只是简单操作下 后续讲分析吧
2.2 Jstack工具 查看Thread Dump
也是JDK自带的
使用方式为 jstack –l PID
那如何知道PID呢 先要使用JPS工具 执行结果如下
看4500 这个吧 jstack –l 4500
What? 好吧 系统装了多个JDK版本 不一致windbg找不到相应的系统符号表吧
不整了 演示一下 效果一样
2.3 java Mission Control 简称JMC查看Thread Dump
JDK1.8后自带
直接系统搜索 java Mission Control
点击了一通 总算找到了 更为详细吧 但是使用起来比较麻烦