acctlist.sh:プロセスアカウント情報のリスト


スクリプト

図1に、プロセスアカウント情報をリストするシェルスクリプトを示します。入力ファイルは、acctonコマンドで出力したバイナリのプロセスアカウントファイルです。

#!/bin/sh
TIMEDIFF=300
acctcom -f -m -t pacct_info |
sed -n '5,$p' |
awk '{
    cmd=sprintf("%s~%s",$1,$2)
    elaps[cmd] = elaps[cmd] + $6
    sys[cmd] = sys[cmd] + $7
    user[cmd] = user[cmd] + $8
    count[cmd] = count[cmd] + 1
}
END {
for ( proc in user) {
    split(proc,array,"~")
    printf"%-12s ",array[1]
    printf"%-12s ",array[2]
    printf"%15.2f ",elaps[proc]
    printf"%14.0f ",count[proc]
    printf"%12.2f ",sys[proc]+user[proc]
    printf"%6.2f ",(sys[proc]+user[proc])/'"$TIMEDIFF"'*100
    printf"%12.2f ",sys[proc]
    printf"%12.4f ",sys[proc]/count[proc]*1000
    printf"%12.2f ",user[proc]
    printf"%12.4f\n",user[proc]/count[proc]*1000
  }
}' |
sort -rn +8 -9

図1.acctlist.shシェルスクリプト

使い方

(1)環境変数"TIMEDIFF"にプロセスアカウンティングを採取した時間を秒単位で指定してください。
  もし、複数CPUのマシンでプロセスアカウンティングを採取した場合はCPU数を時間に掛けてください。

(2)プロセスアカウンティングのバイナリファイル名は"pacct_info"です。

(3)シェルスクリプトを実行します。出力は標準出力です。リダイレクトして、任意のファイルに出力してください。

出力の見方

図2のように出力されます。全部で10個の項目で、9番目の項目で逆ソートされています。

w root 168.86 10000 163.48 27.25 128.52 12.8520 34.96 3.4960
uptime root 100.97 10000 54.38 9.06 34.61 3.4610 19.77 1.9770
add root 200.85 20000 48.94 8.16 33.12 1.6560 15.82 0.7910
expr root 101.31 10097 28.25 4.71 16.76 1.6599 11.49 1.1380
average root 100.49 10000 23.97 3.99 16.16 1.6160 7.81 0.7810
cpu11.sh root 208.00 1 5.55 0.92 3.96 3960.0000 1.59 1590.0000
cpu12.sh root 96.56 1 6.08 1.01 4.64 4640.0000 1.44 1440.0000
ps root 3.93 144 3.17 0.53 1.76 12.2222 1.41 9.7917
cpu13.sh root 57.40 1 5.76 0.96 4.52 4520.0000 1.24 1240.0000
netstat root 1207.81 247 2.47 0.41 1.55 6.2753 0.92 3.7247
kstat root 1.10 2 0.72 0.12 0.03 15.0000 0.69 345.0000
pmap root 3.33 154 3.07 0.51 2.50 16.2338 0.57 3.7013
echo root 8.82 710 1.29 0.22 0.76 1.0704 0.53 0.7465
sleep root 3003.02 486 1.28 0.21 0.85 1.7490 0.43 0.8848
date root 5.65 536 1.15 0.19 0.75 1.3993 0.40 0.7463
vmstat root 1203.57 124 0.78 0.13 0.41 3.3065 0.37 2.9839
#crash root 0.65 2 0.60 0.10 0.25 125.0000 0.35 175.0000
awk root 1.64 126 0.58 0.10 0.34 2.6984 0.24 1.9048
sardo.sh root 2431.81 8 0.54 0.09 0.42 52.5000 0.12 15.0000
sed root 0.28 28 0.10 0.02 0.04 1.4286 0.06 2.1429
nawk root 0.33 33 0.10 0.02 0.06 1.8182 0.04 1.2121
pwd root 0.09 9 0.07 0.01 0.05 5.5556 0.02 2.2222
mkdir root 0.12 4 0.02 0.00 0.00 0.0000 0.02 5.0000
uname root 0.03 3 0.01 0.00 0.00 0.0000 0.01 3.3333
iostat root 600.72 1 0.01 0.00 0.00 0.0000 0.01 10.0000
wc root 0.05 4 0.01 0.00 0.01 2.5000 0.00 0.0000
swap root 0.03 2 0.00 0.00 0.00 0.0000 0.00 0.0000
sort root 0.05 1 0.01 0.00 0.01 10.0000 0.00 0.0000
sadc root 600.16 1 0.01 0.00 0.01 10.0000 0.00 0.0000
rm root 0.07 4 0.00 0.00 0.00 0.0000 0.00 0.0000
mv root 0.03 1 0.00 0.00 0.00 0.0000 0.00 0.0000
kill root 0.12 8 0.02 0.00 0.02 2.5000 0.00 0.0000
ipcs root 0.03 2 0.01 0.00 0.01 5.0000 0.00 0.0000
id root 0.01 1 0.00 0.00 0.00 0.0000 0.00 0.0000
df root 0.02 2 0.00 0.00 0.00 0.0000 0.00 0.0000
cat root 0.32 32 0.08 0.01 0.08 2.5000 0.00 0.0000
#mpstat root 601.28 1 0.02 0.00 0.02 20.0000 0.00 0.0000

図2.acctlist.shの出力例

表1に各フィールドの意味を解説します。

表1. acctlist.sh出力項目の内容

項目番号 項目名 内容
1 command コマンド名で、8文字までの長さです。ルートユーザが実行したコマンドの先頭は、#が付加されます。
2 userid ユーザーIDです。
3 elaps 秒単位の、そのコマンドのエラプス時間合計です。
4 callcount そのコマンドが呼び出された回数です。
5 totalcpu 秒単位の、そのコマンドのCPU時間合計です。
6 rate% 測定区間に占めるCPU時間の割り合いです。
7 syscpu 秒単位の、そのコマンドのシステムCPU時間合計です。
8 sysmsec ミリ秒単位の、そのコマンド1回に要したシステムCPU時間です。
9 usercpu 秒単位の、そのコマンドのユーザCPU時間合計です。
10 usermsec ミリ秒単位の、そのコマンド1回に要したユーザCPU時間です。


Copyright (C) 2004 by The Art of Computer Technologies, Corp.  All rights reserved.