この節では、アカウンティングソフトウェアによって生成されるさまざまなレポートについて説明します。
runacct シェルスクリプトは、呼び出されるたびに基本的な 4 種類のレポートを生成します。これらのレポートは、接続アカウンティング、毎日のログイン別利用状況、日次および月次合計によって報告されるコマンド利用状況の 3 種類を対象とするレポートと、ユーザーの最後のログイン時刻のレポートです。4 つの基本レポートは次のとおりです。
表 61-2 日次アカウンティングレポート
このレポートは、使用された各端末回線に関する情報を示します。次に例を示します。
Feb 27 12:25 1997 DAILY REPORT FOR mercury Page 1 from Wed Feb 26 13:21:58 1997 to Thu Feb 27 12:25:33 1997 1 system boot 1 run-level 3 1 acctg on 1 runacct 1 acctcon TOTAL DURATION IS 1384 MINUTES LINE MINUTES PERCENT # SESS # ON # OFF /dev/pts/5 0 0 0 0 0 /dev/pts/6 0 0 0 0 1 /dev/pts/7 0 0 0 0 0 console 1337 97 1 1 1 pts/3 0 0 0 0 1 pts/4 0 0 0 0 1 pts/5 3 0 2 2 3 pts/6 232 17 5 5 5 pts/7 54 4 1 1 2 pts/8 0 0 0 0 1 pts/9 0 0 0 0 1 TOTALS 1625 -- 9 9 16
from および to 行はこのレポートで反映される時間帯、つまりこの前のアカウンティングレポートが生成されてから現在のアカウンティングレポートが生成されるまでの時間を指定します。その次はシステムのリブート、シャットダウン、電源異常からの回復と、acctwtmp プログラムによって /var/adm/wtmp にダンプされたその他のすべてのレコードです。詳細については、acct(1M) のマニュアルページを参照してください。
このレポートの第 2 部は回線利用状況の内訳です。TOTAL DURATION は、システムがどれだけの時間マルチユーザーモード (端末回線を通してアクセス可能です) であったかを示します。この部分を構成しているカラムを表 61-3 で説明します。
表 61-3 日次レポート
マシンの稼動中は、/var/adm/wtmp ファイルから接続アカウンティングが準備されるので、このファイルを監視する必要があります。wtmp ファイルが急速に大きくなる場合は、acctcon -l < /var/adm/wtmp を実行してどの tty 回線の使用頻度が最も大きいかを調べてください。割り込みが頻繁に発生する場合は、全般的なシステムの性能が影響を受けることになります。さらに、wtmp が壊れることもあります。この問題を解決するには、「wtmp ファイルを修復する方法」を参照してください。
このレポートは、システム資源の利用状況のユーザー別の内訳を示します。次に例を示します。
Feb 27 12:25 1997 DAILY USAGE REPORT FOR mercury Page 1 LOGIN CPU (MINS) KCORE-MINS CONNECT (MINS) DISK # OF # OF # DISK FEE UID NAME PRIME NPRIME PRIME NPRIME PRIME NPRIME BLOCKS PROCS SESS SAMPLES 0 TOTAL 1 1 2017 717 785 840 660361 1067 9 7 20 0 root 1 1 1833 499 550 840 400443 408 2 1 0 1 daemon 0 0 0 0 0 0 400 0 0 1 0 2 bin 0 0 0 0 0 0 253942 0 0 1 0 3 sys 0 0 0 0 0 0 2 0 0 1 0 4 adm 0 0 46 83 0 0 104 280 0 1 0 5 uucp 0 0 74 133 0 0 1672 316 0 1 0 71 lp 0 0 0 2 0 0 3798 1 0 1 0 8198 ksm 0 0 8 0 0 0 0 6 1 0 0 52171 pjm 0 0 56 0 234 0 0 56 6 0 20
日次利用状況レポートで示される各データを表 61-4 で説明します。
表 61-4 日次利用状況レポート
このレポートはコマンド別のシステム資源の利用状況を示します。このレポートでは、最も使用率の高いコマンドがわかり、それらコマンドがどのようにシステム資源を利用しているかに基づいて、どのようにしたらシステムの最適チューニングが可能かを知ることができます。日次レポートも月次レポートも見た目には同じですが、日次要約レポートは当日だけについてのレポートであるのに対して、月次要約レポートは、会計期の初めから当日までについてのレポートです。つまり、月次レポートは、monacct が最後に実行されたときからの累積データを表します。
これらのレポートは TOTAL KCOREMIN によってソートされます。TOTAL KCOREMIN は任意の基準ですが、システムでのドレーンの計算にはすぐれた指標です。
次に日次コマンド要約レポートの例を示します。
Feb 27 12:25 1997 DAILY COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND NUMBER TOTAL TOTAL TOTAL MEAN MEAN HOG CHARS BLOCKS NAME CMDS KCOREMIN CPU-MIN REAL-MIN SIZE-K CPU-MIN FACTOR TRNSFD READ TOTALS 1067 2730.99 2.01 1649.38 1361.41 0.00 0.00 6253571 2305 sendmail 28 1085.87 0.05 0.24 23865.20 0.00 0.19 101544 39 admintoo 3 397.68 0.12 1132.96 3443.12 0.04 0.00 680220 83 sh 166 204.78 0.31 161.13 651.80 0.00 0.00 598158 20 nroff 12 167.17 0.14 0.24 1205.55 0.01 0.59 709048 22 find 10 151.27 0.27 2.72 563.40 0.03 0.10 877971 1580 acctdusg 3 87.40 0.13 2.74 698.29 0.04 0.05 883845 203 lp 10 74.29 0.05 0.22 1397.38 0.01 0.24 136460 57 expr 20 67.48 0.02 0.06 3213.24 0.00 0.34 6380 1 mail.loc 3 65.83 0.01 0.04 11285.60 0.00 0.15 24709 15 cmdtool 1 37.65 0.02 20.13 2091.56 0.02 0.00 151296 1 uudemon. 105 37.38 0.09 0.32 435.46 0.00 0.27 62130 17 csh 6 35.17 0.05 57.28 756.30 0.01 0.00 209560 13 col 12 31.12 0.06 0.26 523.00 0.00 0.23 309932 0 ntpdate 22 27.55 0.05 11.18 599.00 0.00 0.00 22419 0 uuxqt 44 18.66 0.04 0.06 417.79 0.00 0.74 32604 3 man 12 15.11 0.03 7.05 503.67 0.00 0.00 85266 47 . . .
表 61-5 で、日次コマンド要約レポートに示されるデータをカラム別に説明します。
表 61-5 日次コマンド要約レポート
この月次コマンド要約は、次のただ 1 点の相違を除いて日次コマンド要約と同じです。つまり、月次コマンド要約は monacct が最後に起動されたときからの累積合計を示します。次に例を示します。
Mar 4 02:30 1997 MONTHLY TOTAL COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND NUMBER TOTAL TOTAL TOTAL MEAN MEAN HOG CHARS BLOCKS NAME CMDS KCOREMIN CPU-MIN REAL-MIN SIZE-K CPU-MIN FACTOR TRNSFD READ TOTALS 771 483.70 0.94 8984.09 515.12 0.00 0.00 2248299 179 sh 105 155.41 0.23 429.58 667.94 0.00 0.00 491870 1 uudemon. 85 29.39 0.07 0.29 434.28 0.00 0.23 49630 14 acctcms 5 27.21 0.04 0.04 752.41 0.01 0.90 218880 1 ntpdate 17 21.30 0.04 14.10 605.73 0.00 0.00 18192 0 dtpad 1 19.69 0.01 10.87 2072.70 0.01 0.00 46992 8 sendmail 17 16.75 0.02 0.02 859.04 0.00 0.91 1965 0 acctprc 1 14.92 0.03 0.03 552.69 0.03 0.95 115584 0 uuxqt 34 14.78 0.03 0.04 426.29 0.00 0.92 25194 0 uusched 34 10.96 0.03 0.03 363.25 0.00 0.91 25194 0 sed 40 10.15 0.03 0.09 315.50 0.00 0.36 64162 2 man 5 10.08 0.02 57.58 555.05 0.00 0.00 25773 2 getent 1 7.68 0.01 0.02 921.60 0.01 0.40 20136 0 in.rlogi 5 7.65 0.01 4331.67 611.73 0.00 0.00 87440 0 cp 37 7.28 0.03 0.05 280.08 0.00 0.50 1739 36 date 27 7.24 0.02 0.03 329.12 0.00 0.65 23443 1 ls 15 7.05 0.01 0.02 503.33 0.00 0.79 14123 0 awk 19 6.94 0.02 0.06 372.04 0.00 0.32 666 0 rm 29 6.83 0.02 0.04 301.32 0.00 0.60 2348 17
各データ項目については、「日次コマンド要約」の説明を参照してください。
このレポートは、特定のログインが最後に使用された日付を示します。この情報を使用して、使用されていないログインやログインディレクトリを見つけることができます。それらのログイン、ログインディレクトリは保存して削除できます。次に例を示します。
Feb 27 12:25 1997 LAST LOGIN Page 1 . . . 00-00-00 rebecca 00-00-00 sjwolf 97-02-27 klw 00-00-00 reception 00-00-00 smithey 97-02-27 lou 00-00-00 release 00-00-00 smsc 97-02-27 root 00-00-00 resch 00-00-00 smtp
/var/adm/pacctn ファイル、または acct.h 形式の任意のファイルの内容は、acctcom プログラムを使用していつでも調べることができます。このコマンドを実行するときに、ファイルも標準入力も指定しなければ、acctcom は pacct ファイルを読み取ります。acctcom は、終了したプロセスに関する情報を示します (実行中のプロセスは ps コマンドで調べることができます)。acctcom のデフォルト出力は次に示す情報を示します。
コマンド名 (スーパーユーザー特権を使用して実行された場合は # 記号)
ユーザー
tty 名 (未知の場合は ? として表示)
開始時刻
終了時刻
実時間 (秒単位)
CPU 時間 (秒単位)
平均サイズ (K バイト単位)
acctcom にオプションを使用することにより、次の情報を得ることができます。
fork/exec フラグの状態 (exec を使用しない fork の場合は 1)
システム終了状態
hog 係数
合計 kcore 分
CPU 係数
転送文字数
読み取りブロック数
表 61-6 で acctcom のオプションを説明します。
オプション |
説明 |
---|---|
-a |
選択したプロセスに関する特定の平均統計を表示する (統計は出力が記録された後に表示される)。 |
-b
|
ファイルを逆読みし、最後のコマンドから先に表示する (標準入力の読み込みには関係しない)。 |
-f |
fork/exec フラグおよびシステム終了状態カラムを出力する (出力は 8 進数)。 |
-h |
平均メモリーサイズに代えて hog 係数を表示する。hog 係数は、経過時間とプロセスが実行中に消費した合計 CPU 利用可能時間との比 (合計 CPU 利用時間/経過時間)。 |
-i |
入出力カウントを含むカラムを出力する。 |
-k |
メモリーサイズの代わりに、キロバイト/分ごとのコアサイズの合計値を表示する。 |
-m |
平均コアサイズ (デフォルト) を表示する。 |
-q |
出力レコードは出力しない。平均統計だけを出力する。 |
-r |
CPU 係数 (システム使用時間 / (システム使用時間 + ユーザー使用時間) を表示する。 |
-t |
システムおよびユーザー CPU 時間を表示する。 |
-v |
出力からカラム見出しを除外する。 |
-C sec |
合計 (システム + ユーザー) CPU 時間が sec 秒を超えたプロセスだけを表示する。 |
-e time |
time 以前に存在したプロセスを hr[:min[:sec]] の書式で表示する |
-E time |
time 以前に開始されたプロセスを hr[:min[:sec]] の書式で表示する。同じ time を -S と -E の両方に使用すれば、そのときに存在していたプロセスを表示する。 |
-g group |
group に属しているプロセスだけを表示する。 |
-H factor |
factor を超えるプロセスだけを表示する。ただし、factor は「hog 係数」(-h オプションを参照)。 |
-I chars |
chars によって指定されるカットオフ数を超える文字数を転送したプロセスだけを表示する。 |
-l line |
端末 /dev/line に属しているプロセスだけを表示する。 |
-n pattern |
pattern 「+」が 1 回以上現れることを意味する以外は、一般的な正規表現に一致するコマンドだけを表示する。 |
-o ofile |
レコードを出力しないで、レコードを acct.h 形式で ofile にコピーする。 |
-O sec |
CPU システム時間が sec 秒を超えるプロセスだけを表示する。 |
-s time |
time 以後に存在したプロセスを hr[:min[:sec]] の書式で表示する。 |
-S time |
time 以後に開始されたプロセスを hr[:min[:sec]] の書式で表示する。 |
-u user |
user に属しているプロセスだけを表示する。 |
メインの日次アカウンティングシェルスクリプトである runacct は、通常、プライムタイムつまり最も忙しい時間帯を避けて cron により起動されます。この runacct シェルスクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。さらに、課金目的で prdaily と monacct が使用する日次および累積要約ファイルも準備します。
runacct シェルスクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct が起動し直せるように処理を完了しようとします。runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。(runacct が使用するファイルは、特にことわりのないかぎり、ディレクトリ /var/adm/acct/nite にあります。) runacct の実行中、すべての診断出力は fd2log に書き込まれます。
runacct は起動されると lock と lock1 というファイルを作成します。これらのファイルは、runacct が同時に実行されるのを防ぐものです。runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。lastdate ファイルには runacct が最後に起動されたときの月日が入っており、このファイルは runacct を 1 日に 1 回しか実行できないようにするために使用されます。runacct がエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが root と adm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。runacct を再び起動する手順については、「runacct を再起動する方法」を参照してください。
runacct を再起動可能にするために、処理は再入可能な別々の状態に分割されます。statefile というファイルを使用して、最後に終了した状態が追跡されます。各状態が終了するたびに、statefile は更新されて次の状態に反映されます。1 つの状態の処理が終了すると、statefile が読み取られて次の状態が処理されます。runacct は、CLEANUP 状態に達すると、ロックを解除して実行を終了します。各状態は表 61-7 に示すように実行されます。
表 61-7 runacct 状態
状態 |
説明 |
---|---|
SETUP |
turnacct switch コマンドが実行されて新しい pacct ファイルが作成される。/var/adm/pacctn 内の (pacct ファイル以外の) プロセスアカウンティングファイルが /var/adm/Spacctn.MMDD に移される。/var/adm/wtmp ファイルは (最後に現在時のレコードが追加されて) /var/adm/acct/nite/wtmp.MMDD に移され、新しい /var/adm/wtmp が作成される。closewtmp と utmp2wtmp は、現在ログインしているユーザーに課金処理を行うため、wtmp.MMDD と新しい wtmp にレコードを追加する。 |
WTMPFIX |
wtmpfix プログラムが nite ディレクトリ内の wtmp.MMDD ファイルを調べて誤りがないか確認する。データの変更によっては、acctcon を失敗させることがあるので、wtmp ファイルに日付変更のレコードが現れた場合は、wtmpfix は関係するタイムスタンプを調整しようとする。さらに、wtmp ファイルからのエントリが壊れていた場合、壊れたエントリをすべて削除する。問題が解決された後のバージョンの wtmp.MMDD が tmpwtmpp に書き込まれる。 |
CONNECT |
acctcon プログラムが使用されて、ctacct.MMDD ファイルに接続アカウントレコードが記録される。これらのレコードは tacct.h 形式になっている。acctcon は、さらに、lineuse および reboots ファイルを作成する。reboots ファイルは、wtmp ファイルで見つかったすべてのブートレコードを記録する。 |
PROCESS |
acctprc プログラムを使用して、プロセス課金ファイル /var/adm/Spacctn.MMDD が ptacctn.MMDD の合計アカウントレコードに変換される。runacct が失敗した場合に、Spacct ファイルが処理されないように、Spacct ファイルと ptacct ファイルは番号で照合される。 |
MERGE |
MERGE プログラムが、プロセスアカウントレコードを接続アカウントレコードとマージして daytacct を作成する。 |
FEES |
MERGE プログラムが、fee ファイルからの ASCII tacct レコードを daytacct にマージする。 |
DISK |
dodisk プロシージャが実行されて disktacct ファイルが生成されている場合は、DISK プログラムがこのファイルを daytacct にマージし、disktacct を /tmp/disktacct.MMDD に移す。 |
MERGETACCT |
MERGETACCT が、daytacct を累積合計課金ファイルである sum/tacct とマージする。daytacct が毎日 sum/tacct.MMDD に保存される。したがって、sum/tacct は壊れたり失われても、作成し直すことができる。 |
CMS |
acctcms プログラムが数回実行される。acctcms は、まず Spacctn ファイルを使用してコマンド要約を生成し、sum/daycms にそれを書き込む。次に、sum/daycms を累積コマンド要約ファイル sum/cms とマージする。そして、最後に、sum/daycms および sum/cms ファイルからそれぞれ ASCII のコマンド要約ファイル nite/daycms と nite/cms を生成する。lastlogin プログラムを使用してログファイル /var/adm/acct/sum/loginlog が作成される。これは、各ユーザーが最後にログインした時刻を示すレポートである。(runacct が真夜中を過ぎてから実行された場合は、いずれかのユーザーが最後にログインした時刻を示す日付が 1 日分狂うことになる。) |
USEREXIT |
インストールに依存しない任意の (ローカル) 課金プログラムをこの時点で取り入れることができる。runacct はそのプログラムを /usr/lib/acct/runacct.local と想定する。 |
CLEANUP |
一時ファイルが整理され、prdaily が実行され、その出力が sum/rpt.MMDD に保存され、ロックが解除され終了する。 |
runacct を CLEANUP 状態で起動し直すときは、最後の ptacct ファイルが不完全であるため、このファイルを削除してください。