使用の上に
Linux はその安定性により、サーバーのオペレーティング システムとして使用されることが増えています (もちろん、真剣に「Linux はオペレーティング システムのカーネルにすぎない」と言う人もいます:)。しかし、基盤となるオペレーティング システムとして Linux を使用すると、サービスが 24 時間 365 日安定していることを保証できますか? いいえ、ビジネス機能はシステム上で実行されるプログラムによって実現されることを知っておく必要があります。ビジネス機能の安定性を実現するには、Linux を選択するのは最初のステップにすぎません。ビジネス プログラムが短期的に安定しないように、私たちはさらに努力します。プレート。
サーバーに障害が発生した場合、外部的な原因としては、業務機能が正常に提供できないということが考えられますが、プログラム側から見た内部的な原因としては、業務プログラムの問題(プログラム自体のバグ)が考えられます。誤操作 (スクリプトやコマンドの不適切な実行)、システム リソースの観点からは、CPU プリエンプション、メモリ リーク、異常なディスク IO 読み取りおよび書き込み、ネットワーク異常などが考えられます。問題が発生した後、さまざまな原因が考えられる中、どのように分析を進めればよいのでしょうか。問題の場所を特定するためのツールはありますか?
頂上の紹介
今回紹介するatopは、Linuxのシステムリソースやプロセスを監視するツールで、システムリソース(CPU、メモリ、ディスク、稼働状況をログファイルとしてディスクに保存することができ、サーバに問題が発生した場合には、対応するtopログファイルを取得して分析することができます。atop はオープン ソース ソフトウェアです。ソース コードと rpm インストール パッケージはここから入手できます。
上での使い方
atop をインストールした後、コマンド ラインに「atop」コマンドを入力して、システムの現在の実行ステータスを確認できます。
システムリソース監視フィールドの意味
上図には多くのフィールドと値が列挙されていますが、各フィールドの意味は何でしょうか? 私たちは何を考えるべきでしょうか?上の各フィールドの意味はサンプリング周期に関連しています。まず、上の図の上部に注目してみましょう。
ATOP行:ホスト名、情報採取日時、情報収集頻度が表示されます。
PRC 行: この列には、プロセスの全体的な実行ステータスが表示されます。
- sys: 過去 10 秒間のカーネル モードでのすべてのプロセスの実行時間の合計
- usr: 過去 10 秒間のユーザー モードでのすべてのプロセスの実行時間の合計
- #proc: 過去 10 秒間に変換されたプロセスの数
- #zombie: 過去 10 秒間のゾンビ プロセスの数
- #exit: 10 秒のサンプリング期間中に終了したプロセスの数
CPU 行: cpu 列には、コアとユーザーの割合、処理中の割り込みの割合、アイドル状態の CPU の割合など、サーバーの CPU の全体的なステータス情報が表示されます (ここでは 100%*CPU コア数、CPU はディスクのパフォーマンスの問題により、アイドル状態で待機する場合があります)
- sys、usr: CPU がプロセスの処理に使用される場合、プロセスがカーネル モードとユーザー モードで占める CPU 時間の割合
- irq: プロセスの割り込み要求を処理する CPU の実際の割合
- idle: CPU がアイドル状態である時間の割合 (アイドル状態に加えて、ディスク IO を待機している間もアイドル状態になります)
- wait: CPU が「プロセスがディスク IO を待機し、CPU がアイドル状態」の状態にある時間の割合。
CPU 列の値を加算した結果は N00% になります (N は CPU コアの数です)。
cpu 行: 各コアのステータス情報。合計 CPU 情報と同じです。各列の合計が合計 CPU ステータス情報です。
CPL 行: cpl は、サーバーの全体的なパフォーマンスも反映します。表示される情報には、過去 1 分、5 分、および 15 分間からサンプリングされたプロセス待機キューの数が含まれます。
- avg1、avg5、および avg15 フィールド: 過去 1 分、5 分、および 15 分間に実行キューで待機していたプロセスの平均数
- csw: コンテキストスイッチの数
- intr: 割り込み発生回数
- numcpu: CPU のコア数
MEM 行: この列はメモリの使用量を示します。
- tot: 物理メモリの総量
- free: 空きメモリのサイズ (このフィールドだけではメモリ不足を判断できません。このブロックの内容は次の場所で使用できるため、free -m の -/+buffers/cache:free も参照する必要があります)いつでも使用できます。また、Use Swap があるかどうかを確認して、メモリが不足しているかどうかを判断することもできます)
- キャッシュ: ページキャッシュに使用されるメモリサイズ
- ダーティ: メモリ内のダーティ ページのサイズ
- buff: ファイルのキャッシュに使用されるメモリ サイズ
- スラブ: システム カーネルが占有するメモリ サイズ
SWP 行: この列はスワップ領域の使用量を示します。
- tot: スワップ領域の総量
- free: スワップスペースの残りのスペースの合計量
PAG 行: この列は仮想メモリのページングを示します。
swin: スワップされたメモリページの数
swout: スワップアウトされたメモリページの数
LVM/DSK 行: この列はディスク使用量を示します。各ディスク デバイスは列に対応します。sdb デバイスがある場合は、DSK 情報の列を追加します。
- sda: ディスクデバイス識別子
- ビジー: ディスクがビジーである時間の割合
- read: 読み取り、KiB/r、MBr/s: 1 秒あたりの読み取りリクエスト数とリクエストされた kb および mb の数
- write: write、KiB/w、MBr/w: 1 秒あたりに書き込まれるリクエストの数、およびリクエストされた kb および mb の数
- avq: ディスクの平均キュー長 (実際の監視によると、この列はディスク リクエストの平均数 avgrq であるようです)
- avio: ディスクの平均 IO 時間
NET 行: NET の複数の列には、トランスポート層 (TCP/UDP)、ネットワーク層 (ip)、およびネットワーク インターフェイスのネットワーク伝送情報が表示されます。
- Transport: トランスポート層(TCP/UDP)のデータ入出力の表示 例えば、サーバーの内部プロセス間のデータ通信は、トランスポート層を介して送信する必要がないと考えて、トランスポート層で表示します。通信網。
- ネットワーク: ネットワーク層 (ip) でのデータ入出力の表示。
- eth0: デフォルトのネットワークインターフェースのデータ入出力の表示、つまりethoのipを介したデータ送信の表示、
- sp: ネットワークカードの帯域幅 (1000M)
- pcki: 受信パケットのサイズ
- pcko: 送信パケットのサイズ
- si: 1 秒あたりの受信データ サイズ
- so: 1 秒あたりに送信されるデータのサイズ
- coll (衝突): 1 秒あたりの衝突の数
- mlti (MULTICAST): 1 秒あたりのマルチキャスト数
- erri/erro: 1 秒あたりの入力および出力のエラー数
- drpi/drpo: 1 秒あたりに失われた入力および出力パケットの数
- lo: 127.0.0.1 ネットワーク インターフェイスを介したデータ送信のデータ表示。パラメータは上記の eth0 と同じです。
プロセス列: プロセス列には、過去 10 秒の各プロセスのデータが表示されます
m モード: メモリ状態モード
-
SYSCPU: 過去 10 秒間にカーネル モードでプロセスが占有した CPU 時間
-
USRCPU: 過去 10 秒間にユーザー モードのプロセスが占有した CPU 時間
-
VSIZE: 過去 10 秒間にプロセスが占有した仮想空間のサイズ
-
RSIZE: 過去 10 秒間にプロセスが占有したメモリ容量
-
PSIZE: 過去 10 秒間にプロセスが占有したページ サイズ
-
VGROW: 過去 10 秒のプロセス増加による仮想空間サイズ
-
RGROW: 過去 10 秒のプロセス増加によるメモリ サイズ
-
SWAPSZ: 過去 10 秒間にプロセスによって使用されたスワップ領域のサイズ。
-
MEM: 過去 10 秒間にプロセスによって占有されたメモリの割合
メモリビュー(メモリ消費量)
メモリ ビューにはプロセスのメモリ使用量が表示されます。m キーを押してメモリ ビューに入ります。
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-43Aaiup9-1685945076992)(http://images.cnblogs.com/cnblogs_com/) bangerlee/320012/r_atop%E5 %86%85%E5%AD%98%E8%A7%86%E5%9B%BE.png)]
上図の下部は、仮想メモリ空間のサイズ (VSIZE)、各プロセスが占有するメモリ空間 (RSIZE)、および前のサンプリング サイクルでの仮想メモリと物理メモリの増加サイズ (VGROW、RGROW) を示しています。 MEM 列は、プロセスが占有している物理メモリのサイズを示します。
上図の PAG 列の情報から、この時点でシステムメモリの負荷が高く、ページスワップが発生していることがわかります。プロセスビューの VGROW 列と RGROW 列から、メモリの量が増加していることがわかります。 VirtualBox プロセスによって占有されるメモリが大幅に増加し、VirtualBox プロセス用のスペースを確保するために、一部のプロセスによって占有されるメモリが減少します (負の VGROW または RGROW フィールド)。
d-mode: ディスクステータスモード
- WRDSK: 過去 10 秒間にプロセスによってディスクに書き込まれたデータの量
- DSK: 過去 10 秒のプロセスによって占有されていたディスクの割合
- CMD: プロセス名
pモード:プロセスステータスモード。同じ名前のプロセスが1列に表示され、プロセス名に従ってグループ化されて表示されます。
- NPROCS: 同じ名前のプロセスの数
他のパラメータは上にリストされています
v モード: スレッド状態モード
uモード:ユーザーモード
ユーザーごとのグループ表示
gモード:標準モード
デフォルトビュー(一般情報)
上部の情報インターフェイスに入ります。表示されているのはプロセス情報のデフォルト ビュー (上の図の下部) です。g キーを押すと、他のビューからデフォルト ビューにジャンプします。
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-qiUTh24x-1685945076993)(http://images.cnblogs.com/cnblogs_com/)バンガリー/320012/r_%E9 %BB%98%E8%AE%A4%E8%A7%86%E5%9B%BE.png)]
上の図から、PID 3061 の検索プロセスが終了するまでに、カーネル モードで 3.43 秒、ユーザー モードで 0.96 秒の CPU 時間を費やしたことがわかります。使用された合計 CPU 時間は、10 分のサンプリング期間と比較して 4.39 秒でした。 CPU時間占有率は1%、ST列はプロセスの状態、Nは前回のサンプリング周期で新たに生成されたプロセス、Eはプロセスが終了したこと、EXC列はプロセスの終了コードを示します。 。「<>」記号内のプロセス名からも、プロセスが終了していることがわかります。
s: プロセスの現在のステータス。s(スリープ)、R(実行中)などが含まれます。
c: コマンドモード
コマンドビュー (コマンドライン)
c キーを押すと、各プロセスに対応するコマンドを表示するコマンド ビューに入ることができます。
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-5cN8rsx8-1685945076993) (http://images.cnblogs.com/cnblogs_com/) bangerlee/320012/r_atop%E5 %91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F.png)]
同僚の「Ma Daha」が特定のスクリプトやコマンドを実行することにより、システム リソースの使用率が非常に高くなることがありますが、このときは、atop のコマンド ビューから例外の原因となったコマンドを簡単に見つけることができます。
関連ファイルの上に
/etc/atop: atop の設定ファイルを保存するディレクトリ
/etc/rc.d/init.d/atop: atop の起動ファイル
/etc/cron.d/atop: atop のスケジュールされたタスク ファイル、デフォルトは毎日 0:00
/var/log/atop: atop ログ ファイルを開始します。デフォルトでは、その日のログ ファイルが毎日 0:00 に生成され、atop -r file を通じて情報を表示できます。しかし、自動再生の機能は見つかりません。 b と入力することしかできません。 指定した時間の情報を表示するには、
/usr/bin/atop: atop コマンドディレクトリを実現するループを作成できます。
atop -r atop_20160510 -b 13:00 -e 17:00
1. atop によって生成されたログ ファイル情報は、10 分のサンプリング期間で記録されます。これは、/etc/atop/atop.daily ファイルを変更することで変更できます。
各時点でのサンプリング ページの組み合わせにより atop ログ ファイルが形成され、「atop -r XXX」コマンドを使用してログ ファイルを表示できます。では、atop ログ ファイルはどのような形式で保存すればよいのでしょうか?
ログ ファイルの上に保存する方法については、次のようにすることができます。
- 毎日、その日の情報を記録する atop ログ ファイルを保存します。
- ログ ファイルの名前は「atop_YYYYMMDD」です。
- ログの有効期限を設定し、一定期間前のログ ファイルを自動的に削除します
実際、atop 開発者は上記のログ保存方法を提供しており、対応する atop.daily スクリプトはソース コード ディレクトリにあります。atop.daily スクリプトでは、INTERVAL 変数を変更することで atop 情報のサンプリング期間を変更できます (デフォルトは 10 分)。次のコマンドの値を変更することで、ログが保存される日数を変更できます (デフォルトは 10 分です)。 28日):
(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )&
最後に、毎朝 atop.daily スクリプトを実行するように cron ファイルを変更します。
0 0 * * * root /etc/cron.daily/atop.daily
atop のレコードをテキストにエクスポートします。
top -r /val/log/top/top/atop_slot10_suse10sp2_20120622 -b 04:00 -e 16:10 >> atop_log.txt
上記のコマンドを 1 つのコマンドと組み合わせて使用すると、情報をファイルにリダイレクトできます。次に例を示します。
トップ -v -b 01:00 -e 01:05 atop_linux_20160119>me.log
CPU アイドル率を確認するには、次のようにします。
top – PCPU – r atop_linux_20160119 | grep – v SEP | grep – v RESET | awk – F "[print,, (9=11=13]] 100%"]"
上のその他のパラメータ:
ログイン後にコピー
使用法: atop [-flags] [interval [samples]]
または
使用法: atop -w file [-S] [-a] [interval [samples]]
atop -r [file] [-b hh:mm] [-e hh:mm] [-flags]
generic flags:
-a show or log all processes (i.s.o. active processes only)
-R calculate proportional set size (PSS) per process
-P generate parseable output for specified label(s)
-L alternate line length (default 80) in case of non-screen output
-f show fixed number of lines with system statistics
-F suppress sorting of system resources
-G suppress exited processes in output
-l show limited number of lines for certain resources
-y show individual threads
-1 show average-per-second i.s.o. total values
-x no colors in case of high occupation
-g show general process-info (default)
-m show memory-related process-info
-d show disk-related process-info
-n show network-related process-info
-s show scheduling-related process-info
-v show various process-info (ppid, user/group, date/time)
-c show command line per process
-o show own defined process-info
-u show cumulated process-info per user
-p show cumulated process-info per program (i.e. same name)
-C sort processes in order of cpu-consumption (default)
-M sort processes in order of memory-consumption
-D sort processes in order of disk-activity
-N sort processes in order of network-activity
-A sort processes in order of most active resource (auto mode)
specific flags for raw logfiles:
-w write raw data to file (compressed)
-r read raw data from file (compressed)
special file: y[y...] for yesterday (repeated)
-S finish atop automatically before midnight (i.s.o. #samples)
-b begin showing data from specified time
-e finish showing data after specified time
参考:
https://blog.51cto.com/u_15715098/5707324
http://www.taodudu.cc/news/show-3691508.html?action=onClick