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番目の項目で逆ソートされています。
|
図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.