sar -k コマンドを使用すると、Kernel Memory Allocator (KMA) に関して次の動作が表示されます。
KMA を使用すると、カーネルサブシステムは必要に応じてメモリーを割り当て、解放できます。最大量のメモリーを静的に割り当てるのではなく、ピークを下回る負荷を要求するのが予想されるため、KMA はメモリー要求を「小」 (256 バイト未満)、「大」 (512 バイト〜 4K バイト)、「サイズ超過」 (4K バイト超) という 3 つのカテゴリに分けます。また、2 つのメモリープールを管理して、「小」要求と「大」要求を満たします。「サイズ超過」要求は、システムページアロケータからメモリーを割り当てることで満たされます。
KMA 資源を使用するドライブや STREAMS の作成に使用中のシステムを調査する場合は、sar -k を使用すると便利です。それ以外の場合は、このコマンドで提供される情報は不要です。KMA 資源を使用するが、終了前には特に資源を返さないドライバやモジュールがあると、メモリーのリークが生じることがあります。メモリーリークが発生すると、KMA によって割り当てられるメモリーは時間が経つにつれて増大します。したがって、sar -k の alloc フィールドの値が時間が経つにつれ増える場合は、メモリーリークの可能性があります。メモリーリークのもう 1 つの兆候は、要求が失敗することです。この問題が発生した場合は、メモリーリークのために KMA がメモリーを予約したり割り当てたりできなくなっている可能性があります。
メモリーリークが発生した場合は、KMA からメモリーを要求したが返していないドライバや STREAMS がないかどうかをチェックする必要があります。
$ sar -k 00:00:00 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail 01:00:00 2523136 1866512 0 18939904 14762364 0 360448 0 02:00:02 2523136 1861724 0 18939904 14778748 0 360448 0 |
表 36-12 に、-k オプションからの出力を示します。
表 36-12 sar -k コマンドからの出力
フィールド名 |
説明 |
---|---|
sml_mem |
KMA が小メモリー要求プール内で使用できるメモリーのバイト数 (小要求は 256 バイト未満) |
alloc |
KMA が小メモリー要求プールから小メモリー要求に割り当てたメモリーのバイト数 |
fail |
小量のメモリーで失敗した要求数 |
lg_mem |
KMA が大メモリー要求プール内で使用できるメモリーのバイト数 (大要求は 512 バイトから 4K バイトまで) |
alloc |
KMA が大メモリー要求プールから大メモリー要求に割り当てたメモリーのバイト数 |
fail |
大メモリーで失敗した要求数 |
ovsz_alloc |
サイズ超過要求 (4K バイトを超える要求) に割り当てられたメモリーの容量。これらの要求はページアロケータによって満たされるので、プールはない |
fail |
サイズ超過メモリーで失敗した要求数 |
$ sar -k SunOS venus 5.8 Generic sun4u 09/07/99 00:00:00 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail 01:00:00 2523136 1866512 0 18939904 14762364 0 360448 0 02:00:02 2523136 1861724 0 18939904 14778748 0 360448 0 03:00:00 2523136 1865664 0 18939904 14745884 0 360448 0 04:00:00 2523136 1867692 0 18939904 14746616 0 360448 0 05:00:01 2523136 1867208 0 18939904 14763700 0 360448 0 06:00:00 2523136 1867772 0 18939904 14779444 0 360448 0 Average 2724096 1791806 0 20089344 15434591 0 360448 0 |