概要
サービスの運用にあたってサーバーやOSなどアプリケーションを動かす上での基本となる知識を深めていくシリーズとして、
今回はOSのプロセスファイルシステム、OS内部のI/Oの計測の注意とOS内部の統計情報の取得方法についてまとめました。
システムコールを確認する方法
strace:現在どのシステムコールを実行しているのかを確認できる
さらに、オプションとしてstrace - p PID
で実行中のプロセスが呼び出しているシステムコールを確認できる。
OSのI/O処理の計測についての注意
各レイヤーのI/O
- DBMS
- ライブラリ(及びシステムコール)の呼び出し(pread()やpwrite()など)
- ファイルシステム(UFSやNTFSなど)
- ファイルキャッシュ
- デバイスドライバー(SCSIやファイバーチャネルなど)
- ストレージ
OSのI/O性能情報を見る際にどこで計測された情報なのかということに注意する必要があります。
デバイスドライバーレベルでの性能情報を表示するOSmoあり、ファイルキャッシュで終了するI/Oの性能情報が含まれないものもあります。この場合はDBMSの性能情報とは異なった値になります。その場合はファイルキャッシュによる性能の違いが考えられます。
pstack
コールスタックを確認できる。
コールスタックを見ると現在処理中の箇所がわかるので処理の分析に役立ちます。例えば、アプリケーションやDBMSのあるプロセスが止まっているように見えた時はpstackを実行します。
gdb -p PID
デバッガでコールスタックを表示
プロセスファイルシステム
UNIX系OSのルートディレクトリの /proc
に位置し、現在のプロセスの状態を表すファイルが配置されています。現時点のプロセスに対応するディレクトリ構造になっています。物理ディスク上には存在せず、メモリ上のみの仮想的なファイルシステムです。
/proc/PID/status
: そのプロセスの各種状態(実行・スリープなどや仮想メモリの各種サイズなど)がわかる
/proc/PID/task
: スレッドに関する情報を確認できます
/proc/meminfo
: システムのメモリのサマリーが表示される
このように統計情報をカーネルの外で見ることができます。
アプリケーションやDBMSなどはプロセスファイルシステムを使ってOSに関する情報やCPU使用量などを表示する仕組みもあります。
プロセスファイルシステムに関するコマンドをうまく使うことでトラブル時の分析に役立てることができます。
DBサーバーの定常監視で取得すべきOS情報
vmstat(sar)を使用し、以下の情報を取得します
CPU使用率、CPU待ちの「r」やI/Oniよるブロック「b」。
また、ページングの状況にも注意し、ディスク使用率・レスポンスがわかるコマンドを使って取得します。
取得間隔
コマンドの負荷に応じて取得間隔を変えます。
コマンド | 間隔 | 負荷の程度 |
---|---|---|
vmstat | 数秒 | 軽い |
top | 1分 | 高い |
OSの性能情報を確認するときによく使うコマンド
コマンド | 内容 |
---|---|
vmstat | OS全体の統計情報を表示する。CPU,メモリ、ディスクの使用率やI/O状況など。 |
sar | vmstatと同様にOS全体の統計情報を表示する。過去の情報も確認できるがvmstatより表示される情報が少ないです。 |
iostat | I/Oデバイスの統計情報を表示する。デバイス毎にレスポンスタイムや使用率などを確認したいときに使います。 |
netstat | ネットワークの統計情報を表示するコマンド。ネットワークインターフェースやプロトコル毎に送信・受信したデータ量やルーティングテーブルを確認したいときなどに使います。 |
top | 実行中のプロセス情報を一覧表示します。実行中の状態であるプロセスのみ確認できます。プロセス毎に消費しているCPU使用率や時間などを確認したい時に使います。 |
ps | その瞬間に存在しているプロセス情報を一覧表示します。 |
まとめ
サーバーを運用するにあたってレスポンスを改善したいとなったケースで
どこがボトルネックになっているかを確認したいケースがあると思います。
その時に適切なコマンドを使えるように今回学んだ内容を活かしていきたいと思います。