NginxでSSLセッションキャッシュを有効にした際に新規セッションが張れなくなる事象について
多分Nginxでゴリゴリやっている人ならm9(^Д^)プギャーだろうけど、メモっておく。
サーバサイドでSSL処理をする際に少しでもCPU処理を軽くする+レイテンシを下げたい目的で
ssl_session_cache shared:SSL:128m; ssl_session_timeout 300m;
的な設定を入れた所、負荷が高い時間帯に
[alert] 14099#0: *1627571 could not allocate new session in SSL session shared cache "SSL" while SSL handshaking, client:〜省略〜
というログが出た。ソースコードをほげほげ読んでみると
ngx_event_openssl.cのngx_ssl_new_session
で記述されている処理でおそらく
- キャッシュ領域に書き込もうとする
- 溢れている時は一度古いのを消す
- 但し、空けた瞬間に別のリクエストがそこを使ってしまう
- もともと空ける処理をしていたところは再度書き込みに失敗する
- エラーとなる
という流れっぽい。
その為、CPU負荷も問題が無かったことから一旦キャッシュはnoneで設定するようにした。