So-net無料ブログ作成
検索選択

問題点の解決方法 [Unix]

アプリケーションの実行速度が遅い

検出方法 先ずアプリケーションのログ・ファイルをチェックしエラーが無いか確認します。その後でコマンドを使用してアプリケーションの処理時間と,アプリケーションのスワップ・アウト情報を確認します

原因 解決方法
アプリケーションの効率が悪い ・アプリケーションが効率良く動作するように,アプリケーションを作成しなおす。
・プロファイリング・コマンドやデバッグ・コマンドを使用してアプリケーションを分析し,効率の悪いコード部分を見つけてください。
アプリケーションが最適化されていない ・オペレーティング・システムの最新のパッチをインストールする
・最新バージョンのコンパイラを使用する
・並列処理を使用する
アプリケーションがスワップ・アウト プロセスが利用できるメモリを増やします。
・アプリケーションのメモリ使用量を減らします。
アプリケーションのメモリ・リソース不足 ・プロセスが利用できるメモリを増やします。
・アプリケーションのメモリ使用量を減らします。
スワップ領域不足 ・スワップ領域を増やしその領域を複数のディスクに分散させます。
アプリケーションのCPUリソース不足 ・ CPUの追加(但し、仮想メモリの性能に影響有り)
・ クラス・スケジューラを使用
ジョブの優先順位を設定
・ ジョブをオフピークの時間帯にスケジューリング
・ ハードウェアRAID を使用
ディスク入出力 ・ディスク入出力を効率的に分散させます。

1.メモリ不足 ページングの発生が頻繁にあるか空きページが少ない場合は,作業負荷に対してメモリ量が不足している可能性があります。メモリ不足を検出し,性能上の問題を診断してください。

検出方法
vmstat コマンドを使用して,ページングとメモリ消費についての情報を得ます。

原因 解決方法
プロセスが利用するメモリ不足 ・アプリケーションのメモリ使用量を減らす
・プロセスが利用できるメモリを増やす
・物理メモリを増やす

2.スワップ領域不足 利用可能なスワップ領域をすべて消費した場合,システムはその問題を示すメッセージをコンソールに表示します。スワップ領域が不足しているかどうかを検出し,性能上の問題を診断してください。

検出方法
通常の作業負荷での稼働時に,swapon -s により情報を取得します。  

原因 解決方法
構成に対しスワップ領域不足 ・構成と作業負荷に対して十分なスワップ領域を構成する。   
スワップ領域が分散されていない。 ・スワップの負荷を複数のスワップ装置に分散させ,性能を改善する。
アプリケーションが,過度にメモリ・リソースを使用している。 ・プロセスが利用できるメモリを増やす。
・アプリケーションのメモリ使用量を減らす。

3.プロセスのスワップ・アウト プロセスがスワップ・アウトされると,システムの応答速度とアプリケーションの実行速度が遅くなります。プロセスがスワップ・アウトされているかどうかを検出し,性能上の問題を診断してください。

検出方法
psコマンドを使用して,システムがプロセスをスワッピングしているかどうかを調べます。

原因 解決方法
メモリ・リソース不足 ・プロセスが利用できるメモリを増やす。
・アプリケーションのメモリ使用量を減らす
スワッピングが,ページ再生の早い段階で発生する。 ・ワッピングの発生頻度を低くする。

4.CPUリソース不足 CPUのアイドル時間が短い場合は,CPUが十分に使用されていることを示しますが,システムが十分なCPUリソースをプロセスに提供できないと性能が低下することがあります。CPUリソース不足を検出し,性能上の問題を診断してください。

検出方法
vmstatコマンドを使用して,CPU のシステム時間,ユーザ時間,およびアイドル時間の情報を取得します。
/usr/bin/kdbx .k /vmunix /dev/memコマンドのcpustat 拡張を使用して,CPU の使用状況をチェックする(TRUE64)

原因 解決方法
アプリケーションのCPU 使用量が多い  ・アプリケーションを最適化する。
・CPU のディスク入出力のオーバヘッドを削減する。(ハードウェアRAIDなど)
・プロセッサを追加する。

5.ディスクのボトルネック 特定のディスクへ過度の入出力が発行されると,過度に使用されるディスクが性能上の問題となる可能性があります。ディスク入出力の負荷の偏りを検出し,性能上の問題を診断してださい。

検出方法
iostatコマンドを使用して,どのディスクの使用頻度が高いかを取得します。 swapon -s コマンドを使用して,スワップ・ディスクの使用状況を取得します。

原因 解決方法
ディスク入出力が均等に分散されていない ・ディスク・ストライピングを使用する。
・スワップ,およびファイル
・システムの入出力を,別ディスクに分散させる。
・オプションで,複数のバスを使用する。

6.ディスク入出力の性能が低い(TRUE64の場合) ディスク入出力はメモリの動作よりも大幅に遅いため,ディスク入出力サブシステムによって,性能上の問題が発生することがよくあります。次の表を使用して,ディスク入出力の性能が低くないか調べ,性能上の問題を診断してください。

検出方法
dbxufs_getapage_stats およびvm_tune データ構造体を使用して,UBC に割り当てられているメモリをモニタリングする。iostat コマンドを使用して,ボトルネックとなっているディスクがあるか調べる。ディスクの断片化をチェックする。dbx nchstats データ構造体を使用して,namei キャッシュのヒット率をチェックする。advfsstat コマンドを使用して,AdvFS ドメインおよびファイルセットの性能をモニタリングする。dbx ufs_clusterstats データ構造体を使用して,UFS のクラスタリングをチェックする。dbxbio_stats データ構造体を使用して,メタデータ・バッファ・キャッシュのヒット率をチェックする。

原因 解決方法
ディスク入出力が効率的に分散されていない ・ディスク・ストライピングを使用する。
・ディスク,スワップ,およびファイル
・システムの入出力を,異なるディスクに分散させる。
・複数のバスを使用する。
ファイル・システムが断片化している ・ファイル・システムの断片化を解消する。
オープン・ファイルの最大数の限界値が小さすぎる ・オープン・ファイルの最大数を増やす。
namei キャッシュが小さすぎる ・namei キャッシュのサイズを大きくする。

7.ネットワークの性能が低い 次の表を使用して,ネットワークの性能が低くないか調べ,性能上の問題を診断してください。

検出方法
netstatコマンドを使用して,ネットワークの衝突や,ネットワーク接続の切断についての情報を表示する。ソケットのリッスン・キューの統計情報をチェックして,保留されている要求の数と,システムが受信SYN パケットをドロップした回数をチェックする。
原因 解決方法
TCP ハッシュ・テーブルが小さい ・TCP 制御ブロックの検索に使用するハッシュ・テーブルのサイズを大きくする。
ソケットのリスン・キューの限界値が小さい  ・ソケットのリスン・キュー上のパーシャルTCP 接続の限界値を大きくする。
発信ネットワーク・ポートが少ない ・同時に存在し予約されていない、動的に割り当てられるポートの数の最大値を増やす。
ネットワーク接続の非アクテフィブが早い ・TCP のkeepalive 機能を有効にする。


メモリ監視(vmstat、swapon、free) [Unix]

メモリ監視

性能上の問題の主な原因は,メモリ不足です。メモリが不足すると,応答時間や,アプリケーションの実行時間に影響することがあります。vmstat コマンドを使用すると,メモリの使用状況をモニタリングできます。このコマンドを実行して,空きページ数が少ない,あるいはページ・アウトが頻発しているという結果が得られた場合は,メモリを使いすぎていると考えられます。

下記の例では、swpdが8232に、siが0に、soが0になっています。swpdは仮想メモリの使用量を示す。swpdが8232とは、8.2Mbytesのスワップ領域が使用されているということです。また、siは1秒当たりのスワップインのメモリ量(Kbytes)で、soは同じくスワップアウトのメモリ量(Kbytes)になり通常は、si,so共に0の状態です。この値が日常的に大きい値の場合は、システムメモリを増やすことを検討すべきです。

作業負荷と比較してスワップ領域が不足すると,アプリケーションの性能と応答速度が低下します。スワップ領域をチェックするには,swapon -s コマンドを使用します。このコマンドを実行して,スワップ領域が不足しているという結果が得られた場合は,スワップ・リソースを増やしてください。 swapon -sは、スワップの使用状況をデバイス毎に表示します。(/proc/swapsの内容を表示します。)

下記は、freeコマンドの例です。 freeコマンドでは、システムが必要とするメモリ容量をbuffers/cacheのusedの欄に表示します。
残りメモリは, freeにバッファ(buffers)とキャッシュ(cached)に転用された分を加えたサイズ(379316=5804+90888+282624)になります。
計算がめんどくさいので-/+ buffers/cache:のfreeの欄を見てください。このサイズが実質の残りメモリサイズになります。

freeコマンドオプション
-b メモリ使用量をバイト単位で表示
-k メモリ使用量をキロバイト単位で表示
-m メモリ使用量をメガバイト単位で表示
-t 物理メモリとスワップメモリの合計も表示
-o バッファを増減したメモリ量の表示を行わない
-s秒 指定した秒ごとに表示


Unixのログ [Unix]

ハードウェアの異常および設定ミスによるエラーなどは、ログを監視することで把握できます。日常な監視ではログ容量の変化を監視し、一定時間に想定される以外のログが記録された場合は異常発生と判断しログ内容の確認をおこなう必要があります。

・auth.log
認証周りのログ。ssh、intetdは基本的にこのファイルにログを書き込みます。

・daemon.log
FTPデーモンなどが書き込みます。

・kern.log
カーネルが書き込みます。

mail.log
メーラーデーモンのログです。

・syslog.log
システムのブート時と,システムがハングアップ・シグナルを受信したときに起動されます。

・message
システムの異常や、マシンをブートさせる時の様子、その他いろいろなログが含まれています。

これらのログのほかに、TRUE64 UNIXであればuerf -R -o full -cコマンドによりハードウェアの詳細な障害レポートを定期的に監視する必要があります。

Linuxには、フリーのログ監視コマンドが有ります。このコマンドを使用して、異常があった場合にメール等で通知する仕組みを作成することも有効です。
フリーのログ監視コマンドには、Logwatch、swatchが有ります。 swatchは出力されるログを監視して、指定したパターンが現れたときにアクションを起こすツールで、Logwatchは、ログから特定のパターンを含む行を加工して表示させることが可能です。


システム情報(/proc) [Unix]


システム情報(/proc)
Linixの/proc直下には、さまざまなシステム情報が存在します。プロセス情報、ハードウェア情報など、/procを監視することで重要な情報を得られるため、コマンドによる監視と共に有効な監視項目になります。 

ファイル 内容
cmdline プロセスのコマンドライン引数を格納
cwd カレント作業ディレクトリ格納
exe 実行形式を格納
root ルートディレクトリを格納
environ 環境変数を格納
fd プロセスが使用(オープン)している
ファイル記述子を格納するディレクトリ
cpu CPUタイムと統計を格納
maps アドレス空間にプロセスがどのように配置されたかの情報
mounts マウントしているファイルシステムの情報を格納
stat プロセス状態を格納
statm ページの使用状況を格納
status プロセス状態を格納

/proc直下には、プロセス情報のほかにさまざまな情報ファイルが格納して有ります。

ファイル名 内容
cmdline システムのブートパラメータ
cpuinfo CPU情報
devices デバイスとメジャー番号の対応
filesystems サポートするファイルシステムタイプ
loadavg ロードアベレージ
interrupts プロセッサへの割り込み要因のリスト
partitions 認識されたパーティション一覧
pci 認識しているPCI情報
ioports 認識されているI/O情報
iomem デヴァイスに割り当てられているメモリ情報
slabinfo スラブキャッシュの状態
stat システム状態
swaps スワップファイル一覧
meminfo 空きメモリ情報
uptime システム動作時間
version カーネルバージョン

トラフィック監視(netstat) [Unix]


トラフィック監視

トラフィック量は、今回はコマンドレベルでチェックできるnetstatで確認します。

NICのエラー及び送信情報を取得するには、netstat -inを使用します。

True64Unixでイーサネット・カウンタのリストを表示させるには,netstat -I ln0-s コマンドを実行します。衝突、通信エラーのカウントによりネットワークの状態を監視してください。

netstat -sは、ホストのネットワーク統計情報をプロトコル毎に表示します。こうした統計からは、各プロトコルの処理の様子を推察することができます。 これらの統計値はOS起動時からの積算値でかつマルチホーム・ホストでは全インターフェイスの合計値となります。

Ip: IPパケットの統計値です。破棄が発生していれば負荷が発生していると考えられます。

項目 内容
total packets received 受信IPパケット総数
forwarded IPフォワーディングIPパケット数
incoming packets discarded 破棄された受信IPパケット数
incoming packets delivered 正常な上位プロトコルへの受信IPパケット数
requests sent ou 下位プロトコルへ転送できた送信IPパケット総数

Icmp: ルータやホスト間で通信されるネットワーク状態通知のパケットです。数値はパケット数ではなくメッセージ数です。

項目 内容
ICMP messages received 受信したICMPメッセージ総数
input ICMP message failed 受信に失敗したICMPメッセージ数
ICMP input histogram 受信したICMP Type別メッセージ数
destination unreachable 不着
echo requests エコー要求
echo replies エコー回答
ICMP messages sent 送信したICMPメッセージ総数
ICMP messages sent 送信に失敗したICMPメッセージ数
ICMP output histogram 送信したICMP Type別メッセージ数
destination unreachable 不着
echo replies エコー回答

Tcp: コネクション指向プロトコルであるので、表示される数値はパケット数ではなく主にコネクション数になります。

項目 内容
active connections openings Active Open総数
passive connection openings Passive Open総数
failed connection attempts 接続失敗数
connection resets received リセット接続数
connections established 現在のコネクション総数
segments received 受信されたTCPセグメント(データ)数
segments send out 送信されたTCPセグメント(データ)数
segments retransmited 再送されたTCPセグメント(データ)数
bad segments received 不正なセグメントの受信数
resets sent

 

Udp:  UDPは、パケット単位の統計となります。

項目 内容
5288609 packets received 受信UDPパケット総数
packets to unknown port received 該当する転送すべき上位アプリケーション(ポート番号) がなかったUDPパケット数
packet receive errors エラー受信UDPパケット数
packets sent 送信UDPパケット総数


ネットワークの接続確認(traceroute、ping、netstat -r) [Unix]

ネットワークの接続確認

サーバとの接続を確認するには、pingを定期実行し、応答にかかる時間とパケットロスを監視することで確認できます。また、どの経路で問題があるか分からない場合は、traceroutを使用して確認することになります。そのほかに、route、arp、netstatコマンドを使用して現在のルーティング情報を取得し正しく設定されているかの確認をおこなうことも重要な監視の一つです。

tracerouteコマンド
tracerouteコマンドは、ルーティング経路を表示しますので、接続が切れていた場合は何処が切れているかの特定ができます。

pingコマンド
pingコマンドでは、引数なしの場合と、送信データを2k bytes程度のデータを送信して確認する必要があります。これは、一見接続しているように見えても大きいパケットを送信した場合に帯域の問題で接続できない場合があるためです。

netstat -rコマンド
ルーティングの確認には、netstat -rを使用します。
 

Flags 意味
U 有効
H ホスト
D ダイナミックルーティング
G ゲートウェイ


ディスク監視(iostat、df、du) [Unix]


ディスク監視

利用可能なディスクにディスク入出力負荷が均等に分散されていない場合は,過度に使用されているディスクでボトルネックが発生することがあります。iostatコマンドを使用すると,ディスク入出力が均等に分散されているか調べることができます。このコマンドを実行して,一部のディスクが過度に使用されているという結果が得られた場合は,ボトルネックを解消する必要があります。

iostatは、tty,CPUのほかに物理ディスク毎にレポートを表示します。 

項目 内容
Kbps  1秒当たりにドライブに転送されたデータ量をキロバイト単位で示します。
tps 物理ディスクに対して 1 秒当たりに行われた転送回数を示します。
Kb_read 読み取られた合計キロバイト数
Kb_wrtn  書き込まれた合計キロバイト数

また、Linuxでディスクの使用状況を確認するには、dfコマンドを利用します。通常は、dfの結果を基に、どのディレクトリにあるファイルがディスクを圧迫しているのかをduで確認して対策を考えることになります。

下記の様にduコマンドを使用すると、ファイルサイズを確認することができます。


CPUリソースの確認(vmstat、cpuinfo) [Unix]


vmstatコマンドを使用すると,CPUの使用状況をモニタリングできます。このコマンドを実行して,システム時間やユーザ時間が多いという結果が得られた場合は,多くの場合は、CPUリソースに問題があります。また、LinuxではCPU平均負荷の計測はuptimeコマンドが便利です。

下記はvmstatで情報を取った例でう。USが0、SYが0でidが90%台になっています。この場合は、アプリケーション、システム共にCPUリソースを多量に使用していないことが分かります。もし、US,SYの数値が大きく長時間使われている場合は何らかの問題が発生していると考えてください。

 また、procs のrは実行待ちのプロセス数、bは割り込み不可能なスリープ状態のプロセス数及びwはスワップ・アウトされていますが、それ以外は実行可能なプロセス数になります。

usの割合が高い場合は、システムの動作が良好であることを示します。しかし、usの割合が高いのに処理が遅い場合は、効率の悪いソースコード、CPUの処理能力不足、メモリ待ちの頻発やキャッシュ・ミスによって発生します。

 idの割合が高い場合は、CPUがリソースまたは、イベント待ち状態になっているか、CPU負荷が標準的で有る場合が有ります。しかし、CPU負荷が標準的なことが明らかな場合は、ハードウェアが能力の限界、カーネルのデータ構造体の飽和、メモリ、ディスク入出力、またはネットワークに問題がある場合が有ります。 

syの割合が高い場合は、システム・コール、デバイス割り込み、キャッシュ・ミス、ページング、スワッピングなどが多数発生することで起こります。また、ページングとスワッピングが多数発生している場合は、仮想メモリのスライシングに必要はメモリが少ない場合に発生します。 

syの割合が高く、idの割合が低い場合は、アプリケーションによりシステムを呼び出す動作が多い可能性が有ります。この現象は、頻繁なシステム・コール、高い割り込みレート、多数の小規模入出力転送、多数のIPC またはネットワーク転送などにより発生します。 

syの割合が高く、idの割合が低い状態は、ハードウェア障害でも発生することがあります。uerf コマンドでハードウェアをチェックしてください。 

syとidの時間が50 パーセントを超えている場合は、メモリ・リソースが不足している可能性があります。 下記の情報は、変動する情報ではないのですがCPU情報を見る方法の一例として記載します。

下記は、uptimeコマンドでのシステム負荷を調べた例です。
表示内容は、現在の時刻、システム稼働期間、現在のログインユーザ数、過去1分間、5分間、15分間のロードアベレージになります。一般的にワークステーションでは、ロードアベレージが1から2までがパフォーマンスがいい状態と言われていますが、サーバでは、10に近い値の場合は高負荷で3は低負荷といえます。(CPUの数に依存しますが・・・)



プロセス監視(ps) [Unix]


プロセス関連の状態監視を行うために、以下項目の監視を行います。

・総プロセス数
CPU占有率
・RAM占有率
・ゾンビプロセス(defunct)

プロセスの確認にpsまたはtopコマンドを使用します。 psコマンドは、プロセスのCPU占有率、プロセスの状態(実行、中断、停止、ゾンビ)などの情報等を監視することが出来ます。
psコマンドオプション(OSにより違いが有ります)

オプション 説明
l 長い形式で表示
u 詳細情報を表示
j PGIDなどを表示
s シグナル形式
v vm形式
f コマンドライン部分をプロセスの親子関係に基づいてツリー状に表示
a デーモン以外のプロセスを表示
x デーモンプロセスの情報を表示
S 子プロセスのcpu時間とページフォールトを合計して表示
c 実行ファイル名のみ表示
w 表示行を増やす。
h ヘッダを表示しない
r 実行中のプロセスだけ表示
n USERとWCHANを数字で表示

表内容(OSにより違いが有ります)

ヘッダー 説明
USER プロセスの所有者
PID プロセス番号
%CPU CPU を使用している時間の割合
%MEM メモリの使用率
SIZE 仮想イメージの合計(KB)
RSS 実メモリの使用サイズ(KB)
TTY 使用端末
STAT プロセスの状態
D 割り込み不可能なスリープ状態
R 実行可能状態 (実行キューにある)
T スリープ状態
S トレース中または停止中
Z 消滅した (ゾンビ) プロセス
W 実メモリのページを使っていない
< 優先順位が高いプロセス
N 優先順位が低いプロセス
L 実メモリのページをロックして利用している
START プロセスを生成した時刻
TIME プロセスがCPU を使用した累計時間
COMMAND コマンド名

topコマンドは、システム全体の情報を表示しますが、指定により項目でプロセスの並べ替えを行うことができます。
topコマンドオプション

オプション 説明
N PIDでソート
P CPU使用率でソート
M メモリ使用率でソート
T 時間でソート
s 秒 指定した間隔で表示

表示内容

オプション 説明
1行目 現在時刻・稼働時間・ログインユーザ数・ロードアベレージ 1分・5分・15分前
2行目 各プロセス合計・待機中プロセス・稼動中・ゾンビプ・停止
3行目 CPU使用率。ユーザ・システム・ナイス・I/O待ち・アイドル
4行目 メモリ容量の表示。合計・使用中・空き・共有・バッファ
5行目 スワップ容量の表示。合計・使用中・空き

プロセス明細行

オプション 説明
PID プロセス識別(ID)番号
PRI 優先度
NI ナイス値(相対的優先度)-20(最高)~19(最低)
SIZE プロセスの容量(KB)
RSS プロセスが使用している実メモリ(KB)
SHARE プロセスが使用している共有メモリ
STAT プロセスの状態を表す
S スリープ状態
T 停止中
D 割り込み不可スリープ
N 優先順位が低い状態
R 実行中
< 優先順位が高い状態
Z ゾンビ(終了できない)
W スワップアウト状態
%CPU CPU使用率(この大きい順で表示されている)
%MEM 実メモリ使用率
TIME プロセスの実行時間(秒)
COMMAND プロセスが今現在実行中のコマンド名


メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。