httpsでリクエストをするとslab cacheが増えて解放されない
他にも記事があるけど自分もハマったので。
apiで運用していると直面する問題
- 他のサイトからデータを収集しているサーバー
- マイクロサービスアーキテクチャでapi連携しているサーバー
- 内部のAPIサーバをhttpからhttpsに切り替えると起きる
- 常駐するデーモンやcronで叩かれるコマンド、プログラムが終了しても残るのが特徴
リソースモニタ
- 以下のグラフのように黄色のslab cacheがジリジリ増えてきて最終的にメモリ不足になる
対応方法
- 二つの方法がある
ジリジリ増えるなら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キャッシュが増大化していく
サーバーのメモリが少しずつ圧迫される原因と対策を調べてみた