247 lines
9.2 KiB
Bash
Executable file
247 lines
9.2 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# See: http://www.brendangregg.com/ColonyGraphs/cloud.html
|
|
|
|
hidezone=1 # convert zonenames to "zone-000n"
|
|
cpulimit=10 # scale node size from 0 to cpulimit percent
|
|
|
|
# For an OS where a single busy process shows pcpu as 100%, such as Linux,
|
|
# cpulimit can be set to 100. You may want to use smaller values, eg, 10, to
|
|
# emphasize smaller CPU consumers. For OSes where pcpu is the average across
|
|
# all CPUs, eg, Solaris, you will want to make cpulimit much smaller (divide
|
|
# by number of CPUs).
|
|
|
|
function output_colors {
|
|
echo '
|
|
# web
|
|
comm2color["httpd"] = "palevioletred3";
|
|
comm2color["nginx"] = "palevioletred3";
|
|
comm2color["zeus.zxtm"] = "palevioletred3";
|
|
comm2color["zeus.monitor"] = "palevioletred3";
|
|
comm2color["zeus.eventsd"] = "palevioletred3";
|
|
comm2color["zeus.admin"] = "palevioletred3";
|
|
comm2color["zeus.eventd"] = "palevioletred3";
|
|
comm2color["zeus.flipper"] = "palevioletred3";
|
|
comm2color["curl"] = "palevioletred3";
|
|
comm2color["wget"] = "palevioletred3";
|
|
|
|
# databases
|
|
comm2color["mysqld"] = "orchid";
|
|
comm2color["./mysqld"] = "orchid";
|
|
comm2color["mysql"] = "orchid";
|
|
comm2color["mysqladmin"] = "orchid";
|
|
comm2color["memcached"] = "orchid";
|
|
comm2color["riak"] = "orchid";
|
|
|
|
# languages
|
|
comm2color["ruby"] = "palegreen3";
|
|
comm2color["ruby18"] = "palegreen3";
|
|
comm2color["php"] = "palegreen3";
|
|
comm2color["php5-cgi"] = "palegreen3";
|
|
comm2color["php-cgi"] = "palegreen3";
|
|
comm2color["perl"] = "palegreen3";
|
|
comm2color["miniperl"] = "palegreen3";
|
|
comm2color["python"] = "palegreen3";
|
|
comm2color["python2.5"] = "palegreen3";
|
|
comm2color["python2.6"] = "palegreen3";
|
|
comm2color["java"] = "palegreen3";
|
|
comm2color["erl"] = "palegreen3";
|
|
comm2color["run_erl"] = "palegreen3";
|
|
comm2color["beam.smp"] = "palegreen3";
|
|
comm2color["Beam.smp"] = "palegreen3";
|
|
|
|
# user
|
|
comm2color["screen"] = "olivedrab3";
|
|
comm2color["vi"] = "olivedrab3";
|
|
comm2color["vim"] = "olivedrab3";
|
|
comm2color["emacs"] = "olivedrab3";
|
|
comm2color["ssh"] = "olivedrab3";
|
|
comm2color["firefox"] = "olivedrab3";
|
|
comm2color["Google"] = "olivedrab3";
|
|
|
|
# compiler
|
|
comm2color["gcc"] = "peachpuff3";
|
|
comm2color["ld"] = "peachpuff3";
|
|
|
|
# other
|
|
comm2color["sendmail"] = "skyblue3";
|
|
comm2color["nrpe"] = "skyblue3";
|
|
comm2color["master"] = "skyblue3";
|
|
comm2color["qmgr"] = "skyblue3";
|
|
comm2color["tslmgr"] = "skyblue3";
|
|
comm2color["pickup"] = "skyblue3";
|
|
comm2color["zabbix"] = "skyblue3";
|
|
comm2color["zabbix_agentd"] = "skyblue3";
|
|
comm2color["rrdtool"] = "skyblue3";
|
|
comm2color["couriertls"] = "skyblue3";
|
|
comm2color["couriertcpd"] = "skyblue3";
|
|
comm2color["courierlogger"] = "skyblue3";
|
|
#comm2color["authdaemond"] = "skyblue3";
|
|
comm2color["imapd"] = "skyblue3";
|
|
comm2color["postgres"] = "skyblue3";
|
|
comm2color["authdeamond"] = "skyblue3";
|
|
comm2color["smtp"] = "skyblue3";
|
|
|
|
# highlight
|
|
comm2color["iperf"] = "lightsalmon";
|
|
comm2color["bonnie"] = "lightsalmon";
|
|
comm2color["bonnie++"] = "lightsalmon";
|
|
comm2color["sysbench"] = "lightsalmon";
|
|
comm2color["top"] = "lightsalmon";
|
|
|
|
# shell scripting
|
|
comm2color["cat"] = "lightblue3";
|
|
comm2color["ggrep"] = "lightblue3";
|
|
comm2color["grep"] = "lightblue3";
|
|
comm2color["sed"] = "lightblue3";
|
|
comm2color["awk"] = "lightblue3";
|
|
comm2color["gawk"] = "lightblue3";
|
|
comm2color["head"] = "lightblue3";
|
|
comm2color["tail"] = "lightblue3";
|
|
comm2color["cut"] = "lightblue3";
|
|
comm2color["wc"] = "lightblue3";
|
|
comm2color["basename"] = "lightblue3";
|
|
comm2color["dirname"] = "lightblue3";
|
|
comm2color["hostname"] = "lightblue3";
|
|
comm2color["uname"] = "lightblue3";
|
|
comm2color["dc"] = "lightblue3";
|
|
comm2color["bc"] = "lightblue3";
|
|
comm2color["date"] = "lightblue3";
|
|
comm2color["sleep"] = "lightblue3";
|
|
|
|
# unused: lightcyan3
|
|
|
|
# system
|
|
comm2color["zlogin"] = "paleturquoise3";
|
|
comm2color["sh"] = "paleturquoise3";
|
|
comm2color["sshd"] = "paleturquoise3";
|
|
comm2color["bash"] = "paleturquoise3";
|
|
comm2color["-bash"] = "paleturquoise3";
|
|
comm2color["login"] = "paleturquoise3";
|
|
comm2color["init"] = "paleturquoise3";
|
|
comm2color["fsflush"] = "paleturquoise3";
|
|
comm2color["pageout"] = "paleturquoise3";
|
|
comm2color["sulogin"] = "paleturquoise3";
|
|
comm2color["<defunct>"] = "paleturquoise3";
|
|
comm2color["rotatelogs"] = "paleturquoise3";
|
|
comm2color["zoneadmd"] = "paleturquoise3";
|
|
comm2color["ttymon"] = "paleturquoise3";
|
|
comm2color["syseventd"] = "paleturquoise3";
|
|
comm2color["fmd"] = "paleturquoise3";
|
|
comm2color["devfsadmd"] = "paleturquoise3";
|
|
comm2color["ntpd"] = "paleturquoise3";
|
|
comm2color["rcapd"] = "paleturquoise3";
|
|
comm2color["in.ndpd"] = "paleturquoise3";
|
|
comm2color["picld"] = "paleturquoise3";
|
|
comm2color["ldap_cachemgr"] = "paleturquoise3";
|
|
comm2color["dlmgmtd"] = "paleturquoise3";
|
|
comm2color["sac"] = "paleturquoise3";
|
|
comm2color["ps"] = "paleturquoise3";
|
|
comm2color["sort"] = "paleturquoise3";
|
|
comm2color["nscd"] = "paleturquoise3";
|
|
comm2color["ttymod"] = "paleturquoise3";
|
|
comm2color["lockd"] = "paleturquoise3";
|
|
comm2color["statd"] = "paleturquoise3";
|
|
comm2color["poold"] = "paleturquoise3";
|
|
comm2color["lockd"] = "paleturquoise3";
|
|
comm2color["svc.startd"] = "paleturquoise3";
|
|
comm2color["svc.configd"] = "paleturquoise3";
|
|
comm2color["cron"] = "paleturquoise3";
|
|
comm2color["inetd"] = "paleturquoise3";
|
|
comm2color["utmpd"] = "paleturquoise3";
|
|
comm2color["syslogd"] = "paleturquoise3";
|
|
comm2color["zsched"] = "paleturquoise3";
|
|
comm2color["kcfd"] = "paleturquoise3";
|
|
comm2color["snmpd"] = "paleturquoise3";
|
|
comm2color["rpcbind"] = "paleturquoise3";
|
|
|
|
color2trans["palevioletred3"] = "#cd68893f";
|
|
color2trans["orchid"] = "#da70d63f";
|
|
color2trans["palegreen3"] = "#7ccd7c3f";
|
|
color2trans["olivedrab3"] = "#9acd323f";
|
|
color2trans["peachpuff3"] = "#cdaf953f";
|
|
color2trans["skyblue3"] = "#6ca6cd3f";
|
|
color2trans["lightsalmon"] = "#ffa07a3f";
|
|
color2trans["lightblue3"] = "#9ac0cd3f";
|
|
color2trans["paleturquoise3"] = "#96cdcd3f";
|
|
|
|
color2hex["palevioletred3"] = "#cd6889";
|
|
color2hex["orchid"] = "#da70d6";
|
|
color2hex["palegreen3"] = "#7ccd7c";
|
|
color2hex["olivedrab3"] = "#9acd32";
|
|
color2hex["peachpuff3"] = "#cdaf95";
|
|
color2hex["skyblue3"] = "#6ca6cd";
|
|
color2hex["lightsalmon"] = "#ffa07a";
|
|
color2hex["lightblue3"] = "#9ac0cd";
|
|
color2hex["paleturquoise3"] = "#96cdcd";
|
|
'
|
|
}
|
|
|
|
function ps2gv {
|
|
echo 'digraph ptree {'
|
|
echo 'node [ style = filled ];'
|
|
|
|
cat - | awk '
|
|
BEGIN {
|
|
curzone = "";
|
|
'"`output_colors`"'
|
|
hidezone = '$hidezone'
|
|
cpulimit = '$cpulimit'
|
|
}
|
|
$1 != curzone { curzone = $1 }
|
|
$3 > 10 && $3 != "PID" {
|
|
ppid = $2
|
|
pid = $3
|
|
mem = $4
|
|
realppid = ppid
|
|
gsub(/.*-/, "", realppid)
|
|
cpu = $5
|
|
if (cpu == "-") { cpu = "0" }
|
|
comm = $6
|
|
present = $7;
|
|
if (realppid == 1) {
|
|
realzone = curzone
|
|
gsub(/.*-/, "", realzone)
|
|
ppid = ppid "-" realzone
|
|
if (hidezone && !hidezonemask[curzone]) {
|
|
hidezonemask[curzone] = 1
|
|
zoneid++
|
|
printf " \"%s\" [ label = \"zone-%05d\" ];\n", ppid, zoneid
|
|
}
|
|
}
|
|
gsub(/^\/.*\//, "", comm)
|
|
|
|
colortxt = ""
|
|
if (comm2color[comm] != "") {
|
|
colortxt = "color = \"" comm2color[comm] "\" "
|
|
}
|
|
|
|
# animation, if column provided:
|
|
if (present != "" && present == "0") {
|
|
colortxt = colortxt " style = \"invis\""
|
|
}
|
|
|
|
# node size, based an pcpu:
|
|
if (cpu < 0.1) {
|
|
sizetxt = ""
|
|
} else {
|
|
if (cpu > cpulimit) { cpu = cpulimit; }
|
|
ratio = mem / 10;
|
|
width = sprintf("%.2f", 1 + 1.8 * ratio);
|
|
height = sprintf("%.2f", 0.7 + 2.3 * ratio);
|
|
sizetxt = " width = \"" width " \" height = \"" height "\" "
|
|
}
|
|
|
|
print " \"" ppid "\" -> \"" pid "\" [ " colortxt " ];"
|
|
print " \"" pid "\" [ label = \"" comm "\" " colortxt sizetxt " ];"
|
|
}
|
|
'
|
|
echo '}'
|
|
}
|
|
|
|
[ ! -x "$(which neato 2>/dev/null)" ] && echo "neato(1) (graphviz) is not installed." && exit 1
|
|
|
|
[ $(uname -s) = "Darwin" ] && ZONE="sess"
|
|
|
|
ps -eo ${ZONE:=zone},ppid,pid,pmem,pcpu,comm | ps2gv | neato -Tpng -Nfontsize=12 -Elen=1.9 | open -f -a /Applications/Preview.app
|