弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述jvm调优相关的知识,希望能为你提供帮助。
1、排查CPU长时间100%思路
- 排查步骤
- top命令找到消耗CPU很高的进程id
- 根据进程找到消耗的cpu很高的线程id
- top -p < 进程较高的id> 然后大写的H
- 对当前进程做stack,输出所有堆栈信息
- jstack< 当前进程id>
- 寻找nid线程号,将对应的占用较高的cpu线程id(十进制)转换为十六进制,在进行与nid匹配
- 将上一步的线程id转换为十六进制
- 根据转换后的十六进制去匹配nid
- 定位问题
- 注意垃圾回收器是否在疯狂的工作(内存泄漏)
- 定位到线程信息,可能跟代码有关,多线程中使用hash map造成死循环
- 代码中可能存在无线循环
内存泄漏(Memory Leak)
是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,
造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
2、排查内存占用过高的思路
- 如果程序没有OOM,可以通过jmap-histo查看
- 如果程序OOM,导出dump日志使用工具分析
打印所有jvm相关的参数
java -XX:+PrintFlagsFinal -version
[root@localhost yum.repos.d]# java -XX:+PrintFlagsFinal -version | grep "HeapDump"
bool HeapDumpAfterFullGC= false{manageable}
bool HeapDumpBeforeFullGC= false{manageable}
bool HeapDumpOnOutOfMemoryError= false{manageable}
ccstr HeapDumpPath={manageable}
java version "1.6.0_41"
OpenJDK Runtime Environment (IcedTea6 1.13.13) (rhel-1.13.13.1.el7_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.41-b41, mixed mode)
HeapDumpOnOutOfMemoryError将其参数设置为True
分析工具
Java VisualVM
MAT(内存泄漏的猜想)
【jvm调优】
推荐阅读
- M1 和 Docker 谈了个恋爱 #yyds干货盘点#
- Redis线程模型的前世今生
- #私藏项目实操分享# Linux开发环境搭建CentOs7之五ELASTICSEARCH集群部署
- Windows10安装虚拟机VMware Workstation ProCentOS 6
- mtail
- JavaScript - PC 端通过纯 js 播放音频文件(播放提示音)
- FTPservice脚本
- JavaScript创建按钮,实现数字自加1
- pip: command not found