用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

相关文章
|
2月前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
在Python的并发编程世界中,没有万能的解决方案,只有最适合特定场景的方法。希望本文能够为你拨开迷雾,找到那条通往高效并发编程的光明大道。
47 2
|
3月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
49 4
|
2月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
43 0
|
4月前
|
Java 编译器 Linux
JVM/编译器/CPU,究竟谁是卧底?一个曾经困扰我一个月的 bug
任何复杂的系统都可能因为一个小小的疏漏而无法运转,本文记录了一个困扰作者一个月的 bug 最终拨云见日的过程。
|
1月前
|
缓存 图形学
选择合适的CPU进行升级
【10月更文挑战第30天】选择合适的CPU进行升级
57 3
|
2月前
|
开发框架 并行计算 .NET
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
33 1
|
3月前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
26 2
|
3月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
153 8
|
3月前
|
存储 监控
【Azure Cloud Service】在Azure云服务中收集CPU监控指标和IIS进程的DUMP方法
在使用Cloud Service服务时,发现服务的CPU占用很高,在业务请求并不大的情况下,需要直到到底是什么进程占用了大量的CPU资源,已经如何获取IIS进程(w3wp.exe)的DUMP文件?
|
3月前
|
JSON 安全 数据库
Python安全性大升级:OAuth与JWT,让你的应用穿上防弹衣🛡️
【9月更文挑战第6天】在数字世界中,每个应用都面临着安全威胁。作为Python开发者,构建强大的系统至关重要。OAuth和JWT为我们提供了坚实的安全保障。OAuth作为一种授权机制,让用户无需向第三方应用暴露敏感信息;JWT则通过自包含的信息传输,增强了安全性并提高了系统性能。利用Python生态中的这些工具,我们可以更好地保护用户数据,守护他们的信任与期待。下面是一个使用PyJWT生成和验证JWT的示例代码:(示例代码同上)通过这些技术,我们的应用能够更加稳健地在数字海洋中航行。
36 3