Unix専用ページへもどる
■システムの状態を調べる方法
# showrev -a バージョン、OSパッチ状況全て
# showrev -p OSパッチのみ
# sysdef -h host IDの表示
# sysdef すべて表示。 swapの場所やサイズ、カーネル変数、カーネルの設定を表示
# prtconf システム構成
# prtdiag システム診断情報
# psrinfo -v プロセッサ情報の表示
仮想プロセッサ 0 の状態 (2006/09/26 14:10:44 時点)
2006/09/26 13:02:12 以降 オンライン です。
sparcv9 プロセッサは 400 MHz で動作しており、
sparcv9 浮動小数点プロセッサがあります。
# modinfo ロードされているカーネルモジュール情報
# isainfo -v 実行可能なアプリケーションモード
# eeprom ハードウェアのパラメータ設定を表示
# uname -a 全てのシステム情報を表示
-m ハードウェアの情報を表示
-r OSのリリースバージョンを表示
■パフォーマンス調査に有効なコマンド
# prstat -v アクティブなプロセスの状態表示(詳細)
PID USERNAME USR SYS TRP TFL DFL LCK SLP LAT VCX ICX SCL SIG PROCESS/NLWP
13514 root 0.0 33 - - - - 72 - 683 260 17K 0 prstat/1
13 root 1.2 0.5 - - - - 98 - 268 24 2K 0 vxconfigd/1
964 root 0.3 0.0 - - - - 100 - 107 0 482 3 had/1
# mpstat 1 CPU毎の状態表示(1秒間隔)
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 789 6 0 543 438 757 50 0 6 0 2822 9 14 4 73
0 6 0 0 441 338 665 4 0 2 0 537 0 2 1 97
0 0 0 0 434 333 548 3 0 0 0 681 0 7 0 93
# sar -qm 1 10 実行キュー(runキュー)の数を表示(1秒ごとに10回)
13:32:30 runq-sz %runocc swpq-sz %swpocc
msg/s sema/s
13:32:31 0.0 0 0.0 0
0.00 0.99
# vmstat 1 仮想メモリの状態表示(1秒ごと)
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s6 s7 s1 in sy cs us sy id
0 0 0 2124984 1454808 133 693 50 1 1 0 15 0 0 0 0 503 2441 715 8 12 80
0 0 0 2102392 1417448 0 6 0 0 0 0 0 0 0 0 0 422 426 609 0 2 98
0 0 0 2102448 1417448 0 0 0 0 0 0 0 0 0 0 0 621 426 633 0 2 98
# iostat 1 Disk I/Oの統計情報表示(1秒ごと)
# iostat -xct 1 スライスごとに表示(ターミナルとCPU統計情報も表示)
tty sd0 sd6 sd7 sd11 cpu
tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id
0 9 26 4 20 0 0 0 18 3 24 0 0 0 7 11 2 79
0 234 2 2 12 0 0 0 3 1 18 0 0 0 0 5 0 95
0 80 33 18 62 0 0 0 0 0 0 0 0 0 0 2 0 98
■ネットワーク関連の調査に有効なコマンド
# ifconfig -a NICの構成パラメータ表示
# netstat -nr ルーティング情報の表示(GateWayがhostsでネーム解決できる場合。nを取るとIP表示)
# netstat -i NICごとの通信量の表示
# arp -a NICごとのアドレス変換テーブル表示
# nslookup DNSサーバに名前解決の問い合わせを行う
■その他調査に有効なコマンド
# ipcs -a プロセスで使用しているアクティブな共有メモリやセマフォを表示
# ipcs -ms アクティブな共有メモリとセマフォを表示
IPC status from <running system> as of 2006年09月26日 (火) 16時02分03秒 JST
T ID KEY MODE OWNER GROUP
Shared Memory:
m 600 0x5bbad3e4 --rw-r----- oracle oinstall
Semaphores:
s 0 0xf900386b --ra-r--r-- root root
s 1 0xf900386c --ra-r--r-- root root
s 2 0xf900386d --ra-r--r-- root root
s 65539 0xf900386f --ra-r--r-- root root
s 65540 0xf9003870 --ra-r--r-- root root
s 65541 0xf9003871 --ra-r--r-- root root
s 65542 0xf900386e --ra-r--r-- root root
s 327687 0xd8241238 --ra-r----- oracle oinstall
# ipcs -q メッセージ・キューを表示
# share ファイルシステムのNFS共有設定確認(マスタ側で実行)
- /share5/nfs root=slave_server1 ""
- /share5/export rw ""
- /share4/solaris9_img ro,anon=0 ""
- /share4/ora904_img root=slave_server2 ""
※NFS設定方法
・マスタ側設定(マウントされるサーバ)
# share -F nfs -o root=スレーブ側サーバ名 マスタ側の共有対象ディレクトリ
(例)share -F nfs -o root=slave_server1 /share5/nfs
恒久対応(再起動してもOK)
(例)
vi /etc/dfs/dfstab
以下記述
share -F nfs -o root=slave_server1 /share5/nfs
参考# share -F nfs -o rw /export/home
# share -F nfs -o ro, anon=0 /share4/solaris9_img
vi抜けて以下実行
/etc/init.d/nfs.server stop ; /etc/init.d/nfs.server start
(またはshareall)
・スレーブ側設定(マウントするサーバ)
# mkdir マウントするディレクトリ(マウントポイント)
# mount -F nfs -o rw,soft マスタ側サーバ名:マスタ側の共有対象ディレクトリ マウントするディレクトリ名
(例)mount -F nfs -o rw,soft master_server:/share5/nfs /share
(ハードマウント例)
mount -F nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,forcedirectio,vers=3,suid callisto:/export/home/solaris9_img /share
恒久対応(再起動してもOK)
/etc/vfstabを編集(行追加)
マ側サーバ名:マ側の共有対象dir - ス側Dir nfs - yes rw,soft,bg
マウントポイントを指定してマウントする。
(例)
vi /etc/vfstab
master_server:/share5/nfs - /share nfs - yes rw,soft,bg
# mount /share
●NFSの調査例
・NFSの設定確認方法
# nfsstat -m
share from callisto:/export/home2/solaris9_img
Flags: vers=3,proto=tcp,sec=sys,hard,nointr,noac,link,symlink,acl,rsize=32768,wsize=32768,retrans=5,timeo=600
Attr cache: acregmin=3,acregmax=60,acdirmin=30,acdirmax=60
・NFS上のどこかのファイルをアクセスしているか確認する方法。
# nfsstat -c
Client rpc:
Connection oriented:
★@calls badcalls badxids timeouts newcreds badverfs
155977 2191 0 0 0 0
timers cantconn nomem interrupts
0 2191 0 0
Connectionless:
calls badcalls retrans badxids timeouts newcreds
417 1 0 0 0 0
badverfs timers nomem cantsend endpoints
0 16 0 0 1
Client nfs:
★Acalls badcalls clgets cltoomany
120858 2192 120858 18
...
★@、Aのcallsが増加する。
NFSを参照しているか確認可能。
・rpcinfo 実行時に、nfs, mountd が表示されれば正常に動作している。
vers の項目は各サービスのバージョンが表示される。
# rpcinfo -p localhost
program vers proto port service
...
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
■ユーザ管理用 コマンド
# fuser [files] ファイルまたはファイル構造を使用しているプロセスの特定
# fuser -u [mountpoint] 現在そのファイルを使用しているユーザーを表示
# fuser -u /tmp
/tmp: 1568c(root)
■ちょっと便利シェル
・opmnプロセスの連続調査
#!/bin/sh
count=1
while [ $count -le 1000 ];
do
echo "$count"
count=`expr $count + 1`
ps -ef | grep opmn
done
・プロセスを見続ける例
#!/bin/sh
while [ true ];
do
ps -ef | grep "/bin/cat"
sleep 1
done
・プロセスが生きていたらKillする例
#!/bin/sh
while true
do
isAlive=`ps -ef | grep "/bin/sh ./look.sh" | grep -v grep | wc -l`
if [ $isAlive = 1 ]; then {
echo "プロセスは生きています"
PID=`ps -ef | grep "/bin/sh ./look.sh" | grep -v grep | awk '{print $2}'`
echo "PID: " $PID
`kill -9 $PID`
}
else
echo "プロセスは死んでいます"
fi
sleep 3
done
■ちょっと便利ツール
・スナップショットの使い方
スナップショットは、ウィンドウ、デスクトップの領域、またはデスクトップ画面全体の「スナップショット」をとります。
このスナップショットは、イメージ・ビューアで表示、保存、または編集できます。
イメージ・ビューアのスナップショットを起動するには
イメージ・ビューアの [ファイル] メニューから [スナップショット] を選択します。
または、次のように -snapshot オプションを付けて、イメージ・ビューアを起動します。
sdtimage -snapshot
・ウィンドウのスナップショットをとるには
スナップショットを起動していない場合は、イメージ・ビューアの [ファイル] メニューから [スナップショット] を選択します。
[スナップタイプ] として [ウィンドウ] を選択します。
[スナップ] ボタンをクリックします。
マウス・ポインタが、プラス記号 (+) に変わります。
マウス・ポインタをスナップ対象のウィンドウに移動して、マウス・ボタン 1 を押します。
ウィンドウがスナップされるたびに、[スナップショット] ダイアログ・ボックス下部に「スナップが成功しました。」というメッセージが表示されます。
・領域のスナップショットをとるには
スナップショットを起動していない場合は、イメージ・ビューアの [ファイル] メニューから [スナップショット] を選択します。
[スナップタイプ] として [領域] を選択します。
[スナップ] ボタンをクリックします。
マウス・ポインタがプラス記号 (+) に変わります。
マウス・ポインタをスナップ対象の領域の隅に移動します。マウス・ボタン 1 を押したまま、マウスを対角線上にドラッグして、スナップ対象の領域を囲んで、マウス・ボタン 1 を離します。
領域がスナップされるたびに、[スナップショット] ダイアログ・ボックス下部に「スナップが成功しました。」というメッセージが表示されます。
・画面のスナップショットをとるには
スナップショットを起動していない場合は、イメージ・ビューアの [ファイル] メニューから [スナップショット] を選択します。
[スナップタイプ] として [画面] を選択します。
[スナップ] ボタンをクリックします。
ウィンドウがスナップされるたびに、[スナップショット] ダイアログ・ボックス下部に「スナップが成功しました。」というメッセージが表示されます。
●コンソールへの出力をファイルに書き出す。
% script
と実行してから
% exit
とするまでのキータイプ、出力をファイルに保存する。
デフォルトのファイルはtypescript
% script file
...
% exit
とするとfileに保存できる。
●プログラムの実行時間を計測する(timeコマンド)
・timeは、C シェルの内部コマンドと /usr/bin/time の外部コマンドの2種類ある。
/usr/bin/time {コマンド}
real : 処理にかかった時間
user : 処理中、ユーザモードだった時間
sys : 処理中、システムモードだった時間
% time pkginfo -l > log
24.0u 2.0s 1:54 22% 0+0k 20+5io 0pf+0w
※ pkginfo -l というコマンドの実行には1分54秒かかり、
そのうちユーザモードで24.0秒、システムのオーバーヘッドで2.0秒消費した。
ファイルシステムからの読み込みが20回、書き込みが5回行われた。
●ファイルのタイムスタンプを変更、ファイルを新規作成する(touchコマンド)
・ファイルを新規に作成する場合は以下で。
% touch sample
サイズが0のファイルsampleが作られる。また、sampleが既に存在した場合はタイムスタンプを現在時刻に変更する。
ファイルのタイムスタンプを任意の時刻に合わせたい場合は、-tオプションを使う。
3月1日12時0分にする場合は以下で。
% touch -t 03011200 sample
2007年3月1日13時30分にする場合は以下で。
% touch -t 200703011330 sample
秒数まで設定する場合は`.'を付けて秒を指定
% touch -t 200703011330.45 sample
※touchオプション例
-c ファイルfileが存在しなかったら新しくファイルを作らない
-f ファイルのパーミッションを無視してタイムスタンプを変更する。
-a 最終アクセス時刻を変更する。
-m 最終更新時刻を変更する。
●指定したサイズのゼロ埋めファイルを生成する(mkfileコマンド)
・1024バイトのファイルを作成
% mkfile 1024 sample
・10KBのファイルを作成
% mkfile 10k sample
・100MBのファイルを作成
% mkfile 100m sample
-n オプションを指定すると、穴あきファイルを生成する。
% mkfile -n 1m sample
みかけは 1MB だが、実際にはもっと少ない。
■ちょっと設定例
・ファイルパーミッションのデフォルトを指定する
% umask によるファイルパーミッションの設定。(シェル内部コマンド)
エディタ等でファイルを作成すると、そのファイルのパーミッションは、普通644 (rw-r--r--) となる。
これはumaskという設定が 022となっていることによる。
umaskは、新しくファイルを作成する際に、許可しないビットを示す。
~~~~~~
普通、ファイルの新規作成時はファイルの実行ビット(eXecute)は立てないので、
umaskが022の場合、666から022を引いた644というパーミッションで新規ファイルが作られる。(umaskが000なら666)
※ログイン時にumaskを設定する場合プロファイルに記述しておく。
・パッケージのインストール
# pkgadd -d {パッケージ}
・漢字入力方法
[Ctrl] + [スペース] で漢字入力できます。
※jserver - Wnn6 かな漢字変換サーバー
■systemファイル設定例
・/etc/system ファイルはカーネル・コンフィグレーション・ファイルと呼ばれる。
通常 /etc/systemの内容は空。
設定例:セマフォや共有メモリを明示的に指定
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmni=100
set semsys:seminfo_semmsl=256
set semsys:seminfo_semmns=256
■prtsat -v についてちょっと詳細
-v
プロセス使用状況を詳細に報告します。
この出力形式には、プロセスが「ユーザーモード」、「システムモード」、「休止状態」
で費やした時間のパーセンテージが含まれます。報告されない統計は、- 記号でマークされます。
PID USERNAME USR SYS TRP TFL DFL LCK SLP LAT VCX ICX SCL SIG PROCESS/NLWP
11063 root 0.2 0.4 - - - - 97 - 43 4 502 0 prstat/1
707 root 0.0 0.2 - - - - 100 - 41 1 115 0 nscd/22
16866 ora904 0.0 0.0 - - - - 100 - 489 0 304 0 java/14
14019 ora904 0.0 0.0 - - - - 100 - 25 0 37 0 opmn/17
1064 root 0.0 0.0 - - - - 100 - 120 1 97 0 OracleAgent/13
876 root 0.0 0.0 - - - - 0.0 - 0 0 0 0 vxrelocd/1
970 root 0.0 0.0 - - - - 0.0 - 0 0 0 0 ttymon/1
...
865 root 0.0 0.0 - - - - 100 - 0 0 0 0 vxcached/1
817 root 0.0 0.0 - - - - 100 - 0 0 0 0 jserver/1
811 root 0.0 0.0 - - - - 100 - 0 0 0 0 dpkeyserv/1
908 root 0.0 0.0 - - - - 100 - 0 0 0 0 atokmngdaemo/1
118 root 0.0 0.0 - - - - 100 - 0 0 0 0 vxesd/3
Total: 137 processes, 434 lwps, load averages: 0.66, 0.88, 0.95
▲出力形式(prstat レポートの列ヘッダーとその意味)
・PID
プロセスのプロセス ID。
・USERNAME
実ユーザー (ログイン) 名または実ユーザー ID。
・USR
プロセスがユーザーモードで費やした時間のパーセンテージ。
・SYS
プロセスがシステムモードで費やした時間のパーセンテージ。
・TRP
プロセスがシステムトラップの処理で費やした時間のパーセンテージ。
・TFL
プロセスがテキストページフォルトの処理で費やした時間のパーセンテージ。
・DFL
プロセスがデータページフォルトの処理で費やした時間のパーセンテージ。
・LCK
プロセスがユーザーロックの待機で費やした時間のパーセンテージ。
・SLP
プロセスが休止状態で費やした時間のパーセンテージ。
・LAT
プロセスが CPU の待機で費やした時間のパーセンテージ。
・VCX
コンテキストの自発的な切り替え数。
・ICX
コンテキストの強制的な切り替え数。
・SCL
システムコールの数。
・SIG
受信されたシグナルの数。
・PROCESS
プロセスの名前 (実行されたファイルの名前)。
・NLWP
プロセス内の lwp の数。
※ライトウェイトプロセス(Light Weight Process、LWP)とは、
スレッドを複数並行して実行するためのカーネル内の機構。
マルチプロセッシングにおいて、ひとつのプロセス内のスレッドを複数個同時に実行する仕組みである。
カーネルスレッドとLWPを総称してネイティブスレッドと呼ぶこともある。
LWPは上述の2つの方式を組み合わせたもので、Solaris等で導入されたスレッド機構。
■prtsat -a についてちょっと詳細
# prstat -a
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
1615 root 3328K 1952K cpu0 59 0 0:00:00 0.4% prstat/1
1060 root 5712K 4568K sleep 59 0 0:32:48 0.3% MultiNICBAgent/13
707 root 2976K 2320K sleep 59 0 0:05:52 0.1% nscd/22
1 root 1312K 744K sleep 59 0 0:04:40 0.1% init/1
943 root 2712K 2136K sleep 59 0 0:05:01 0.1% mibiisa/7
1046 root 5160K 4160K sleep 59 0 0:10:48 0.1% ApplicationAgen/13
16284 ora904 23M 3240K sleep 59 0 0:02:25 0.1% httpd/3
...
2890 oracle 278M 229M sleep 59 0 0:01:45 0.0% oracle/12
974 root 9632K 8224K run 157 - 0:03:04 0.0% had/1
16289 ora904 23M 8744K sleep 59 0 0:00:04 0.0% httpd/3
690 root 4016K 2144K sleep 59 0 0:00:11 0.0% syslogd/14
NPROC USERNAME SIZE RSS MEMORY TIME CPU
------------------------------------------------------
100 root 365M 242M 6.3% 1:15:22 1.0%
16 oracle 4136M 3410M 90% 0:10:07 0.1%
19 ora904 375M 143M 3.8% 0:04:13 0.1%
1 smmsp 4568K 1376K 0.0% 0:00:01 0.0%
1 daemon 2496K 1728K 0.0% 0:00:00 0.0%
Total: 137 processes, 434 lwps, load averages: 1.00, 0.95, 0.94
【その他参考となるヘッダ情報】
・SIZE
すべてのマップ済みのファイルおよびデバイスを含む、プロセスの合計仮想メモリーの
キロバイト (K)、メガバイト (M)、またはギガバイト (G) 単位のサイズ。
・RSS
キロバイト (K)、メガバイト (M)、またはギガバイト (G) 単位のプロセスの常駐セットサイズ (RSS)。
RSS 値は、proc(4) によって提供される見積りですが、
これは実際の常駐セットサイズよりも少なく見積もる場合があります。
容量計画のためにより正確な使用情報を取得するには、
代わりに、pmap(1) に対して -x オプションを使用することをお勧めします。
・STATE
プロセスの状態
cpuN プロセスは、CPU N 上で実行されています。
sleep 休止状態。プロセスは、イベントが完了するのを待っている
run 実行可能状態。プロセスは、実行待ち行列上にあります。
zombie ゾンビ状態。プロセスは終了していて、親プロセスは待っていない
stop プロセスは停止されています。
・PRI
プロセスの優先順位。 数値が大きいほど優先順位が高くなります。
・NICE
優先順位の計算に使用される nice 値。特定のスケージューリングクラスのプロセスのみが、nice 値を持ちます。
・TIME
プロセスの累積実行時間
・CPU
プロセスによって使用された最近の CPU 時間のパーセンテージ。
■prtsat その他オプション
prstat -s cpu CPU使用率でソート
prstat -s size メモリ使用量でソート
例:1時間毎にCPUでソートし上位15のみ出力
prstat -s cpu -c 3600
■pmap -x {PID} についてちょっと詳細
ash-2.05# pmap -x 10587
10587: prstat -a
Address Kbytes RSS Anon Locked Mode Mapped File
0000000100000000 40 40 - - r-x-- prstat
0000000100108000 8 8 8 - rwx-- prstat
000000010010A000 512 512 512 - rwx-- [ heap ]
FFFFFFFF7E700000 1264 816 - - r--s- dev:32,0 ino:83169
FFFFFFFF7E900000 200 184 - - r-x-- libcurses.so.1
...
FFFFFFFF7F3C4000 8 8 8 - rwx-- libc.so.1
FFFFFFFF7F500000 8 8 8 - rwx-- [ anon ]
FFFFFFFF7F600000 176 176 - - r-x-- ld.so.1
FFFFFFFF7F72C000 16 16 16 - rwx-- ld.so.1
FFFFFFFF7FFFC000 16 16 16 - rw--- [ stack ]
---------------- ---------- ---------- ---------- ----------
total Kb 3328 2656 720 -
Address 仮想メモリ上のアドレス (*)
Kbytes 仮想メモリ上のサイズ
RSS(Resident physical memory) 常駐部分のサイズ
Anon そのプロセスが個別に使っている、データセグメント、スタックセグメント
Locked Mode メモリ属性
Mapped File マップしているファイル名
(*) 仮想メモリ上のアドレスとは、実行形式を全メモリに展開した場合のアドレスです。
プロセスのメモリは、テキスト・セグメント、データ・セグメント、スタック・セグメントに分類されます。
ここでセグメントとは、連続したメモリ領域のことで、ページ単位で管理されます。
ps のオプション -y を指定しないで得られるプロセスのメモリサイズの単位はページです。
solaris の場合、1ページ 8KB ですので、 8倍すると pmap で得られた total の値と等しくなります。
■cron についてちょっと設定例
・EDITOR環境設定
% EDITOR=vi; export EDITOR
設定ファイルは/etc/crontab ですが直接編集はしません。(可能ですが)
・実行コマンド(例:vmstat)のパスを事前に調べておく
% which vmstat
/usr/bin/vmstat
・コマンドで編集
% crontab -e
フィールド 書式
---------- --------------------------------------------
分 0から59で指定 *(ワイルドカード)は毎分になる
時 0から23で指定 *(ワイルドカード)は毎時になる
日 1から31で指定 *(ワイルドカード)は毎日になる
月 1から12で指定 *(ワイルドカード)は毎月になる
曜日 0から7で指定0と7は日曜日で、1=月,2=火,以降・・
(実行ユーザ) cronは設定したユーザの権限で実行されます。指定したい場合のみ記述
コマンド 実行コマンドやシェルスクリプトを指定します。
・例(毎時10分間隔でvmstat 5 2を実行する)
0,10,20,30,40,50 * * * * /usr/bin/vmstat 5 2 >> /var/tmp/cronlog
・設定を確認
% crontab -l
#ident "@(#)root 1.20 01/11/06 SMI"
#
# The root crontab should be used to perform accounting data collection.
#
# The rtc command is run to adjust the real time clock if and when
# daylight savings time changes.
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
20 3 * * 6 /opt/SUNWWDR/bin/newwdrlog # SUNWWDRcfg
10 4 1 * * /opt/SUNWssp/bin/codlogrotate # SUNWcod
0,10,20,30,40,50 * * * * /usr/bin/vmstat 5 2 >> /var/tmp/cronlog ★ここに設定
Unix専用ページへもどる