PHP
Linux
Apache
HTTPS
slab

httpsでリクエストをするとslab cacheが増えて解放されない

More than 1 year has passed since last update.

httpsでリクエストをするとslab cacheが増えて解放されない

他にも記事があるけど自分もハマったので。

apiで運用していると直面する問題

  • 他のサイトからデータを収集しているサーバー
  • マイクロサービスアーキテクチャでapi連携しているサーバー
  • 内部のAPIサーバをhttpからhttpsに切り替えると起きる
  • 常駐するデーモンやcronで叩かれるコマンド、プログラムが終了しても残るのが特徴

リソースモニタ

  • 以下のグラフのように黄色のslab cacheがジリジリ増えてきて最終的にメモリ不足になる

memory-day.png

対応方法

  • 二つの方法がある

ジリジリ増えるならcronで1日一回以下のコマンドを実行

/bin/echo 2 > /proc/sys/vm/drop_caches

一気に増えるなら環境変数を設定する

やり方は2パターンあるらしい

export NSS_SDB_USE_CACHE="yes"
export TMPDIR=/dev/shm

おまけ

slabの中身の確認

slabtopコマンドでどのくらいの容量になっているかわかります

slabtop
115563 115410  99%    0.19K   5503   21     22012K dentry

ps

httpsリクエストでのslabキャッシュの影響はlibcurl使ってるphpやapacheでよく起きます。他にはクラウドを操作するコマンドなど。
nodejsはlibcurl使っていないので起きない。

参考

アプリケーション内でhttpsによる外部APIを叩いているサーバのメモリ使用量が増加し続ける件について
slab肥大化とdentry_cacheに辿り着くまでの話
aws sdkを使っているとslabキャッシュが増大化していく
サーバーのメモリが少しずつ圧迫される原因と対策を調べてみた