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

简介: 用python提前预测jvm cpu100%自动dump thread升级版

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


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


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

生命苦短我用python


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

实现思路

99.png


核心代码

包含空格才27行


# psutil 模块 用于监控:
# 安装 pip install psutil
# 打包 pyinstaller -F threaddumptool.py
import psutil
import time
import 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(count):
    for proc in psutil.process_iter(['pid', 'name']):
        if 'java' in proc.info['name']:
            print(proc.info)
            psexecPath = 'D:\PSTools\psexec'
            jdkPath = 'D:/work/software/Java/jdk1.8.0_25/bin/jstack.exe'
            print(psexecPath+' -s '+jdkPath+' -l %s > d:/threaddump%s_%d.txt'% (proc.info['pid'], proc.info['pid'],count))
            subprocess.Popen(psexecPath+' -s '+jdkPath+' -l %s > d:/threaddump%s_%d.txt' % (proc.info['pid'], proc.info['pid'],count), shell=True)
            # subprocess.Popen('jstack  %s  > d:/threaddump%s_%d.txt' % (proc.info['pid'], proc.info['pid'],count), shell=True)
            # subprocess.Popen('jrcmd   %s  print_threads > d:/threaddump%s.txt' % (proc.info['pid'], proc.info['pid']), shell=True)
            # psexec -s D:\work\software\Java\jdk1.8.0_25\bin\jstack.exe -l %s > d:/threaddump%s.txt
def main():
    timer(1)    
def timer(n):
    fileCount = 0
    while True:
        cpu_info = cpu()
        print("cpu占用%s"% (cpu_info))
        if cpu_info > 60:
            fileCount = fileCount + 1
            dump(fileCount)
            time.sleep(60)
            if fileCount > 10:
                break
        time.sleep(n)
main()

效果图

运行脚本

88.png

dump的线程部分截图

77.png


打包EXE

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

66.png

相关文章
|
3月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
293 0
|
8月前
|
SQL 安全 算法
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
Python 3.14 引入了七大核心技术特性,大幅提升开发效率与应用安全性。其中包括:t-strings(PEP 750)提供更安全灵活的字符串处理;类型注解惰性求值(PEP 649)优化启动性能;外部调试器API标准化(PEP 768)增强调试体验;原生支持Zstandard压缩算法(PEP 784)提高效率;REPL交互环境升级更友好;UUID模块扩展支持新标准并优化性能;finally块语义强化(PEP 765)确保资源清理可靠性。这些改进使Python在后端开发、数据科学等领域更具竞争力。
331 5
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
|
7月前
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
193 4
|
8月前
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
308 22
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
在Python的并发编程世界中,没有万能的解决方案,只有最适合特定场景的方法。希望本文能够为你拨开迷雾,找到那条通往高效并发编程的光明大道。
274 2
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
225 4
|
Java 编译器 Linux
JVM/编译器/CPU,究竟谁是卧底?一个曾经困扰我一个月的 bug
任何复杂的系统都可能因为一个小小的疏漏而无法运转,本文记录了一个困扰作者一个月的 bug 最终拨云见日的过程。
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
235 0
|
10月前
|
安全 Ubuntu 网络安全
宝塔面板升级python3
Python 是一种广泛使用的高级编程语言,因其简洁的语法和丰富的库而受到开发者的喜爱。在许多Web应用程序和后端开发环境中,Python已成为重要工具。使用宝塔面板时,保持Python更新至关重要。本文介绍如何在服务器上安全升级Python:从环境准备、检查当前版本、安装工具包、下载并编译新版本、配置环境变量到测试新版本,确保升级顺利进行。建议定期更新以利用新特性和性能改进,并备份数据以防万一。
561 6
|
缓存 图形学
选择合适的CPU进行升级
【10月更文挑战第30天】选择合适的CPU进行升级
434 3

推荐镜像

更多