JVM调优

112 阅读1分钟

1、各种工具

  • jsp 查看所有java进程:

    image.png

  • jstack

    jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 java 应用程序中线程堆栈信息。可以定位线程出现长时间停顿的原因,如线程间的死锁、死循环、请求外部资源导致的长时间等待等问题。

image.png

image.png

果真如此 image.png

  • Java visualVM 一款可视化的工具,跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析。 写一个堆溢出的代码试试:

image.png

image.png (没有调整各个垃圾回收区域的大小,不影响使用)

  • 阿里的arthas(太强了这个)

    官方教程:arthas.aliyun.com/doc/install… 可以找到本机上所有的Java进程,以及序号。可以根据进程序号来监视进程。通过dashboard命令可以查看到大盘信息(实时刷新)

image.png

从大盘信息可以看出,有两处问题比较大:id为8的线程cpu占用率太高了,id为9、10 的线程阻塞。下面一一解决问题:

问题一:CPU占用率高

调用thread + 线程id 8 ,可以直接看到问题代码的位置所在。

image.png

原来是因为一个空的死循环 image.png

问题二:线程阻塞 命令:thread -b ,一步解决

image.png

image.png

另外,arthas支持代码的热部署,实在太帅了!

image.png

image.png

2、实际项目中的应用:

待续~