1. 解决问题
内存溢出(OOM、OutOfMemeory)、CPU飙高、GC频繁等JVM问题的排查、定位,以及调优。
2. 调优步骤
image.png
3. 监控发现问题
监控工具例如Prometheus+Grafana,监控的问题包括:
GC频繁
CPU负载过高
OOM
内存泄露
死锁
程序响应时间较长
4. 工具定位问题
使用分析工具定位oom、内存泄漏等问题。
4.1 调优依据
JVM调优时,吞吐量和停顿时长无法兼顾,吞吐量提高的代价是停顿时间拉长。
所以,如果应用程序跟用户基本不交互,就优先提升吞吐量。如果应用程序和用户频繁交互,就优先缩短停顿时间。
4.2 JDK自带的命令行调优工具
jps:查看正在运行的 Java 进程。jps -v查看进程启动时的JVM参数;
jstat:查看指定进程的 JVM 统计信息。jstat -gc查看堆各分区大小、YGC,FGC次数和时长。如果服务器没有 GUI 图形界面,只提供了纯文本控制台环境,它是运行期定位虚拟机性能问题的首选工具。
jinfo:实时查看和修改指定进程的 JVM 配置参数。jinfo -flag查看和修改具体参数。
jstack:打印指定进程此刻的线程快照。定位线程长时间停顿的原因,例如死锁、等待资源、阻塞。如果有死锁会打印线程的互相占用资源情况。
参考:https://blog.csdn.net/qq_40991313/article/details/132382094
参考:https://blog.csdn.net/u011397981/article/details/128835270
参考:https://blog.csdn.net/G_D0120/article/details/139652201