写点什么

用 python 提前预测 jvm cpu100% 自动 dump thread

发布于: 2021 年 02 月 06 日
用python提前预测jvm cpu100%自动dump thread

本文来自工作实战,xx 地方线上系统今年 jvm cpu100%好几次,给了运维同学一个 bat 脚本需要在 cpu100%的时候,手动执行去 dump thread 提取线索,每次 cpu100%的时候影响范围很大,运维同学很紧张赶快重启服务,导致提取不到线索。这种方式很原始与倡导自动化运维的今天格格不入。


方法总是有的,并且很简单,动动脑筋点子就有了:程序自动检测当 cpu 超过 90%自动 dump thread

该解决方案采用的核心技术

生命苦短我用 python


  • python

  • psutil

  • subprocess

  • 设置 windows 计划任务来执行 python 脚本,执行频率设置几分钟一次。

实现思路

核心代码

包含空格才 27 行

# psutil 模块 用于监控:# 安装 pip install psutil#  打包 pyinstaller -F threaddumptool.pyimport psutilimport subprocess
# 监控cpu信息:def cpu(): cpu = psutil.cpu_count(False) # cpu核数 默认逻辑cpu核数,False查看真实cpu核数; cpu_per = int(psutil.cpu_percent(2)) # 每秒cpu使用率,(1,True) 每一核cpu的每秒使用率; # print(cpu_per) return cpu_per
def dump(): for proc in psutil.process_iter(['pid', 'name']): if 'java' in proc.info['name']: print(proc.info) print("执行导出:jstack %s >d:/threaddump%s.txt"% (proc.info['pid'], proc.info['pid'])) subprocess.Popen("jstack %s > d:/threaddump%s.txt" % (proc.info['pid'], proc.info['pid']), shell=True)
def main(): cpu_info = cpu() print("cpu占用%s"% (cpu_info)) if cpu_info > 90: # 这里超过90 就执行dump dump()
main()
复制代码

效果图

运行脚本

dump 的线程部分截图

打包 EXE

在项目根目录输入 pyinstaller -F threaddumptool.py


python 真的很香,如果您觉得不错请帮忙再看或转发!


发布于: 2021 年 02 月 06 日阅读数: 16
用户头像

自由 2021.02.03 加入

坐标郑州,从业经验10余年,擅长javaweb技术栈。目前感兴趣方向:打造副业,网络安全,高可用高并发,架构,营销。微信公众号【lovepythoncn】,关注我交个朋友!

评论

发布
暂无评论
用python提前预测jvm cpu100%自动dump thread