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()
posted @   SpecialSpeculator  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示