bcc に添付されている便利ツール色々

前回は eBPF を利用するために bcc を導入しました。本来 bcc は自分でプログラムを書くことが前提ですが、標準で添付されているツール群だけでもかなり面白いことがわかります。ただ添付されているコマンドだけでも 100 以上あるので全部取り上げることはできませんが、bcc Tutorial に取り上げられているコマンドだけでも色々面白いことがわかるのでご紹介したいと思います。

execsnoop

このコマンドは前回の動作確認にも使用しました。プログラムの実行を記録するものです。

bcc Tutorial にも記載がある通り、起動して直ぐ終了してしまうがたくさん起動されているコマンドが負荷の原因になっている場合は、ps や top などで見つけにくいため、こういうツールが必要になります。似たようなコマンドに psacct があります。

opensnoop

どのプロセスがどのファイルを開いているのかがわかります。意外とこれをながめているだけでわかることも多いです。

xfsslower

ここでは、Amazon Linux 2 の標準ファイルシステムが xfs なので、xfsslower を取り上げますが、ext4 の ext4slower などもあります。

どんなコマンドかと言うと指定した時間以上IOに時間がかかった場合にそのコマンド名とファイル名を表示してくれるコマンドです。

なんかプロセスが遅いなぁという時にファイルIOがボトルネックになることがあるので、問題の切り分けにログを取っておくと有効かもしれません。

以下の実行例では dd コマンドで無理やり 10ms 以上のレイテンシを作っています。

biolatency

diskio のレイテンシを表示してくれます。単純な iostat よりも詳細な情報を得ることができます。 レイテンシの分布状況から、ディスクアクセスの状況を知るのに役立ちます。

できれば、IOサイズとのクロス集計にすると面白いかもしれません。

cachestat

ディスクキャッシュのヒット率がわかります。またダーティページの状況がわかります。ディスクキャッシュにヒットするかどうかは性能に大きく関わるので、とても有効です。

もしディスクIOが多くて、キャッシュヒット率が低いようならば、メモリの増強を検討するなどの施策が必要になります。

runqlat

プロセスがCPUを待っている時間の分布を表示してくれます。もしこの分布が長い時間の方に長くなっている場合は CPU の増強が必要かもしれません。また定常的に監視するのであれば runqslower の方が良いかもしれません。

とりあえず、このぐらいで。また実際に適用した事例などがあれば紹介したいと思います。