Memcached のメモリ割り当てはページ単位です。 デフォルトでは、1 ページは 1M で、起動時に -I パラメータで指定できます。メモリを申請する必要がある場合、memcached は新しいページを分割し、必要なスラブ領域に割り当てます。ページが割り当てられると、再起動する前にリサイクルまたは再割り当てされることはありません
Memcached はすべてのサイズのデータをまとめませんが、データを事前に登録します空間は一連のスラブに分割されており、各スラブは特定の範囲内のデータ ストレージのみを担当します。以下の図に示すように、各スラブには、前のスラブのサイズより大きく、自身の最大サイズ以下のデータのみが保存されます。たとえば、スラブ 3 には 137 ~ 224 バイトのデータのみが保存されます。データサイズが 230byte の場合、スラブ 4 に割り当てられます。以下の図からわかるように、各スラブが担当するスペースは実際には等しくありません。 memcached デフォルトでは、次のスラブの最大値は前のスラブの 1.25 倍です。これは次の方法で変更できます。
増加率を変更するには、-f パラメーターを変更します。
チャンク は、一連の固定メモリ空間であり、それを管理するスラブの最大ストレージ サイズです。たとえば、スラブ 1 のすべてのチャンクは 104 バイト、スラブ 4 のすべてのチャンクは 280 バイトです。チャンクは、memcached がキャッシュされたデータを実際に保存する場所です。チャンク サイズはスラブが保存できる最大値に固定されているため、現在のスラブに割り当てられたすべてのデータをチャンクに保存できます。時間データのサイズがチャンクサイズより小さい場合、空き領域はメモリの断片化を防ぐために設計されています。たとえば、以下の図では、チャンク
サイズは 224 バイトで、保存されるデータは 200 バイトのみで、残りの 24 バイトはアイドル状態になります。
が、これは起動直後に占有されるのではなく、必要に応じて各スラブに徐々に割り当てられます。
新しいキャッシュ データを保存する場合、memcached はまず適切なスラブを選択し、スラブに空きチャンクがあるかどうかを確認し、空きチャンクがある場合は直接保存します。スラブはメモリを申請する際の単位としてページを使用するため、最初のデータを入れると、サイズに関わらず1Mページがスラブに割り当てられます。ページを申請すると、スラブはこのページのメモリをチャンクのサイズに応じて分割してチャンクの配列にし、チャンク配列から 1 つを選択してデータを格納します。以下に示すように、スラブ 1 とスラブ
2 ページを割り当て、それぞれのサイズに従ってチャンク配列に分割します。
上記の紹介に基づいて、memcached のメモリ割り当て戦略は次のとおりです。スラブの要件に従ってページを割り当て、各スラブは必要に応じてチャンク ストレージを使用します。
ここで注意すべき機能がいくつかあります: