Java 性能工具箱
操作系统工具和分析
- vmstat 1 虚拟内存统计/秒
iostat -xm 5 监控系统设备的I/O负载情况
ethtool eth0 查看网卡带宽(1000兆 125MB/s)
nicstat -i eth0 1 监控网卡eth0的使用情况
网络无法维持在百分之百的使用率,如果持续超过40%就说明接口饱和了。
java只是利用了操作系统的网络参数接口
对于网络应用程序,监控网络不适瓶颈的可能性排查掉
向网络写入数据的应用程序的瓶颈2:
写入的效率低——吞吐量低
写入数据太多——吞吐量高
java 监控工具
- jcmd 进程基本信息
jconsole jvm的活动图形化视图 线程的使用,类和GC的活动
jmap 提供堆转储和jvm内存使用信息
jinfo 查jvm系统属性,动态设置系统属性
jstack 转储java进程的栈信息
jstat 提供GC和类加载的活动信息
jvisualvm 监控jvm的GUI工具
性能分析工具
- 运行性能分析工具时开启并发GC,性能分析工具不合时宜的Full GC暂停会导致缓冲区溢出
采样分析器
0.性能分析工具有两种模式
采样模式和探查模式
1.采样分析器
性能分析器只有在线程到达安全点之后才能获取线程的栈轨迹(stack trace)
线程进入安全点(safepoint)的情况:(设置jvm参数进入安全点 -XX:+UseSafePoint )
在同步锁上阻塞
等待I/O时阻塞
等待管程时阻塞
线程挂起
火焰图async-profiler开源项目
./profiler.sh -d 30 -f profile.html 487396
./profiler.sh -d 20 -e alloc -f hotcodealloc.html 487396
2.探查分析器
根据侵入性,提供更多关于应用程序内部正在发生什么的信息
3.阻塞方法和线程时间线
线程阻塞是不是性能问题的原因,检查线程为什么阻塞
JFR Java Flight Recorder
对于JVM的过去数据进行轻量级数据分析
jdk 8 通过启动命令参数开启