検索
連載

第5回 PDツールでシステムの内部情報に迫れ【前編】障害発生時の金科玉条(2/2 ページ)

PDを行う際に心強い味方となってくれるのがさまざまなツール類だ。ツールを利用することで、ログや設定ファイルからだけでは分からないシステムの内部情報についても知ることができる。そこで今回は、過負荷状態となったときOSの内部ではどのような動作が行われているのか、幾つかのツールを使用して探ってみよう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

パフォーマンス劣化問題をシミュレートする

 さて、今回はPDにおけるツールの利用方法を理解してもらうため、簡単なシミュレーションを行ってみたいと思う。このシミュレーションで「CPUとメモリに負荷をかけた場合にシステムはどのような挙動を起こすのか」ということを体験していただきたい。

 まず、CPUおよびメモリに負荷をかけるツールを用意する。CPUとメモリに負荷がかかればどのようなものでも良いが、今回はリスト1のような、簡単な自作サンプルプログラムを使用した。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト1 サンプルプログラム「swaptest.c」。太字部分の部分は実行例3で

 このプログラムは引数で指定された数だけの子プロセスを生成し、自身と各子プロセスが大きさBUF_SIZEのメモリ領域をMAX_INDEX回割り当てて、そのメモリ領域にゼロを入れる、といった処理を繰り返すプログラムだ。この例ではBUF_SIZEが1Mバイト、MAX_INDEXが10であるため、コマンドの引数に20を渡すと親プロセスと20個の子プロセス、計21個のプロセスがそれぞれ10Mバイト、合計で210Mバイトのメモリを配列として確保し、強制終了させるまでその配列にゼロを埋める処理を行ってCPUを消費し続ける、という動作を行う。このプログラムを次のようにコンパイルし、swaptestを作成する。

$ gcc -o swaptest swaptest.c


 また、このプログラムの実行に当たってシステムの挙動を分かりやすくするため、システム全体で使用するメモリサイズを256Mバイトに、CPU数を1に指定した。これはLinux起動時に「mem=256M」と「maxcpus=1」をカーネルパラメータとして与えれば良い。

プログラムの実行

 さて、それではこのプログラムを実行してみよう。今回はswaptestプログラムを2つ、段階的に実行することでシステムの挙動の変化を観察する。与える引数は環境によって異なると思うが、今回の例では引数を12とするとコンソール入力やsshセッションに体感できるほどの遅延が発生した。

 さて、この「遅延」という現象は、実際には何が原因で発生しているのだろうか? PDを行ってみよう。

コンソールの遅延問題をPDする

 PDの手順としては第1回でも解説したとおり、

  1. 状況把握
  2. 情報収集
  3. データ分析
  4. 解決を図る

というのが一般的だ。それらを踏まえ、今回のシミュレーションを行っていこう。

ステップ1 構成情報の確認

 PDに必要な構成情報を実行例1のように取得する。このシミュレーションのテーマは「プログラムによる負荷がシステムに与える影響の観察」であるため、詳細なハードウェアの構成情報などは取得していない。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例1 システム構成情報の取得

ステップ2 データの取得

 次にシステムの稼働情報を取得するわけだが、プログラムの実行によってシステムの動作が不安定になることは分かっているため、投入前と後のデータを取得して比較を行うことにする。取得するデータは仮想メモリ状況、I/O状況、プロセスの使用状況の3つだ。これらの取得は実行例2のように行う。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例2 仮想メモリ、I/O、プロセスの稼働状況を取得

 準備が整ったら実行例3のようにプログラムを実行する。これで現象発生中のデータが取得できるはずだ。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例3 シミュレーション実施

 さて、ここまでで現象発生中のデータが取得できた。次回では、このデータを使い、ステータスの解釈やデータ分析方法に足を踏み入れていこう。

本記事は、オープンソースマガジン2006年2月号「Linux PD−問題判別脳力養成道場」を再構成したものです。


前のページへ |       

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る