cpu飚高分析
cpuhighanalysis.py
#!/usr/bin/env python
# -*- coding=utf-8 -*-
############################
import os
import sys
import commands
import time
status,output = commands.getstatusoutput('''ps -ef | grep java | grep -v jcollector | grep -v grep | head -1 | awk "{print \$8}" 2>/dev/null''')
if status ==0 and output:
try:
java_home = os.path.dirname(output)
except Exception,e:
java_home = os.environ.get('JAVA_BIN',None)
else:
java_home = os.environ.get('JAVA_BIN',None)
if java_home:
jstack_command = "%s/jstack"%java_home
jmap_command = "%s/jmap"%java_home
jstat_command = "%s/jstat"%java_home
else:
java_home = "/export/servers/jdk1.6.0_25/bin"
jstack_command = "%s/jstack"%java_home
jmap_command = "%s/jmap"%java_home
jstat_command = "%s/jstat"%java_home
print '使用分析工具版本:%s'%java_home
print '当前top信息如下:'
top_command = '/usr/bin/top -b -n 1'
status,output = commands.getstatusoutput(top_command)
print output
print '#'*100
javas_pid_command = 'ps -ef | grep java | grep -v jcollector | grep -v grep | awk "{print \$2}"'
status,output = commands.getstatusoutput(javas_pid_command)
if status == 0:
javas = output.split('\n')
if javas:
for pid in javas:
status,output = commands.getstatusoutput('ps -ef | grep %s | grep -v grep | awk "{print \$(NF-1)}"'%pid)
if output:
app_name = output
print '应用名:%s'%(app_name)
print 'pid:%s'%(pid)
print '#'*100
print 'java,线程情况统计如下'
status,output = commands.getstatusoutput('ps p %s -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r | wc -l 2>/dev/null'%(pid))
print '线程数%s'%output
status,output = commands.getstatusoutput('ps p %s -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r 2>/dev/null'%(pid))
print '线程情况如下,按照占用cpu由大到小排列'
print output
print '占用最高的cpu线程数为:'
#status,output = commands.getstatusoutput('ps p %s -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r | head -1 | awk "{print \$3}" 2>/dev/null'%(pid))
status,output = commands.getstatusoutput('ps p %s -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r 2>/dev/null'%(pid))
#print output
most_thread = output.split('\n')[0]
output = most_thread.split()[2]
print output
print '转为16进制如下:'
status,output = commands.getstatusoutput(r'printf "%x\n" {output}'.format(output=output))
print output
print '线程最高的栈信息如下:'
#status,output = commands.getstatusoutput('%s %s|grep -A 50 %s'%(jstack_command,pid,output))
#if status != 0:
#status,output = commands.getstatusoutput('%s -F %s|grep -A 50 %s'%(jstack_command,pid,output))
status,output = commands.getstatusoutput('%s -F %s'%(jstack_command,pid))
print output
else:
print u'javas 进程查找错误'
#removeSelf()
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示