メモリーを監視すれば,物理メモリーの不足を検出したり,プロセスの不正な動作を検出したりできます。
メモリーは,次の図のように物理メモリーとスワップファイルから構成されています。物理メモリーやスワップファイルが十分でないからといってメモリーが不足しているだけとは限りません。メモリーの利用効率は,ページングとページフォルトで判断可能なため,あわせて監視してください。
メモリー空間の概念を次の図に示します。
図3-2 メモリー空間を示す概念図
物理メモリーが不足している場合,システム全体のパフォーマンスの低下を招きます。
また,プログラムが参照するメモリー領域は,一定時間以上アクセスされないとスワップファイル上に退避され,必要なタイミングで物理メモリーにロードされます。このようにして,少ない物理メモリーを有効利用します。しかし,スワップファイルへのアクセス速度は物理メモリーのアクセス速度に比べて,大幅に低速です。このため,メモリー利用効率が悪くページングやページフォルトが大量に発生している場合,システム処理の大幅な遅延が発生している状態を意味します。
ページングなどは,標準的な処理でも行われています。このため,システム安定稼働時のベースラインを測定し,適切なしきい値を決定してください。
監視テンプレートでは,Swap Outsアラームを提供しています。さらに詳細な情報を参照するには,次の表を参考にしてください。
表3-2 メモリーに関連する主なフィールド
使用レコード | 使用フィールド | 値の見方(例) |
---|---|---|
PI | Total Physical Mem Mbytes | 物理メモリーの容量。 |
Free Mem Mbytes | 物理メモリーの空き容量。 | |
Alloc Mem Mbytes | 物理メモリーの使用量。 | |
Alloc Mem % | 物理メモリーの使用率。 | |
Total Swap Mbytes | スワップ領域の容量。 | |
Free Swap Mbytes | スワップ領域の空き容量。 | |
Alloc Swap Mbytes | スワップ領域の使用量。継続してしきい値(PI レコードTotal Physical Mem Mbytesフィールド)以上の場合,より多くの物理メモリーが必要な可能性がある。 | |
Alloc Swap % | スワップ領域の使用率。継続してしきい値(システムの負荷状態で判断)以上の場合,スワップ領域の拡張が必要な可能性がある。 | |
Page Scans/sec | ページスキャンが発生した1秒当たりの回数。継続してしきい値(150)以上の場合,メモリーがボトルネックになっているおそれがある。 | |
Swapped-Out Pages/sec | スワップアウト処理によってページが取り出された1秒当たりのページ数。継続してしきい値(200)以上の場合,メモリーがボトルネックになっているおそれがある。 | |
Buffers Mem %※ | ファイルバッファに使用している物理メモリーのメガバイト数の割合。 | |
Buffers Mem Mbytes※ | ファイルバッファに使用している物理メモリーのメガバイト数。 | |
Cache Mem %※ | キャッシュメモリーとして使用している物理メモリーのメガバイト数の割合。 | |
Cache Mem Mbytes※ | キャッシュメモリーとして使用している物理メモリーのメガバイト数。 | |
Effective Free Mem %※ | 実際にアプリケーションが使用できる物理メモリーのメガバイト数の割合。 | |
Effective Free Mem Mbytes※ | 実際にアプリケーションが使用できる物理メモリーのメガバイト数。 |
システムのメモリー不足は,メモリー不足が原因とは限りません。プログラムの不具合が原因で,メモリーが不足する場合もあります。プロセスごとのメモリー使用量を監視すれば,これらの原因を切り分けられます。不当にメモリーを占有していたり,メモリー使用量が増加しつづけているプロセスがある場合,そのプロセスのプログラムに不具合があると判断できます。
特定のプロセスに関するメモリー使用量を参照するには,次の表を参考にしてください。
表3-3 プロセスごとのメモリーに関連する主なフィールド
使用レコード | 使用フィールド | 値の見方(例) |
---|---|---|
PD_PDI | Real Mem Kbytes | 各プロセスが使用している物理メモリーの使用量。 特定のプロセスがメモリーを大量に使用しているおそれがある。 |
Virtual Mem Kbytes | 各プロセスが使用している仮想メモリーの使用量。特定のプロセスがメモリーを大量に使用しているおそれがある。 | |
Swaps | 各プロセスでスワップが発生した回数。プロセスのスワッピングからボトルネックを発生させているプロセスを洗い出す必要がある。 |
・メモリーの使用状況を監視したい
仮想メモリーの使用状況は,メモリーの増設が必要かどうかの目安となります。
メモリーの使用状況が一時的に高い場合でも,継続的な高負荷状態ではないときは,パフォーマンスの低下を許容できる可能性があるため,ページスキャン数,スワップアウト処理とあわせて監視すると効果的です。
使用している仮想メモリー使用量(PIレコード Alloc Swap Mbytesフィールド)が,物理メモリー総量(PIレコード Total Physical Mem Mbytesフィールド)以上の場合,より多くのメモリーが必要な可能性があります。
定義例については,「3.2.2(2) 監視テンプレート以外の定義例」を参照してください。
・ページスキャン数を監視したい
ページスキャン数(PIレコードPage Scans/secフィールド)は,監視テンプレートで提供しているPagescansアラームで監視できます。
スワップアウト処理,メモリー使用状況とあわせて監視すると効果的です。
過度にページスキャンしているプロセスを見つけ,対策を立ててください。プロセスに問題がない場合,限界を超えるシステム環境のため,メモリーを増設するなどの対策の目安となります。
詳細については,「3.2.2(1) 監視テンプレート」を参照してください。
・スワップアウト処理を監視したい
スワップアウト処理(PIレコードSwapped-Out Pages/secフィールド)は,監視テンプレートで提供しているSwap Outsアラームで監視できます。
ページスキャン数,メモリー使用状況とあわせて監視すると効果的です。
過度にスワッピングしているプロセスを見つけ,対策を立ててください。プロセスに問題がない場合,限界を超えるシステム環境のため,メモリーを増設するなどの対策の目安となります。
詳細については,「3.2.2(1) 監視テンプレート」を参照してください。
・プロセスのメモリー使用量を監視したい
メモリーの使用状況,ページスキャン数,およびスワップアウト処理で問題があると判断した場合,原因となるプロセスを特定してください。
サーバの活動状況が増加していない状態で,各プロセスのメモリー使用量(PD_PDIレコードReal Mem Kbytesなど)をリアルタイムレポートで数分~数十分程度監視します。表示されている折れ線グラフで,増加しつづけているプロセスがないか確認します。
メモリーリークを発生させている,または過度にスワッピングしているプロセスを特定し,製造元に問い合わせるなどの対策の目安となります。
定義例については,「3.2.2(2) 監視テンプレート以外の定義例」を参照してください。
・実際にシステムで使用できるメモリー量が知りたい(Linux限定)
Linuxは,可能な限りメモリーに一度取得した情報を保持します。そのため,PIレコードのFree Mem Mbytesフィールドで空きメモリー量を監視すると,徐々に値が「0」に近くなります。しかし,実際にそれらのメモリーはいつでも解放でき,アプリケーションの使用を妨げるものではありません。PFM - Agent for Platform 08-11以降では,この「いつでも解放できるメモリー量」をPIレコードのBuffers Mem MbytesフィールドおよびCache Mem Mbytesフィールドで監視できます。これらの値から「総合的な使用可能メモリー量」を計算し,出力しているのがPIレコードのEffective Free Mem Mbytesフィールドです。この値を参照することで,システムの使用可能なメモリー量を確認できます。