負荷試験最中接続が重い時がたまにあった。
phpログを確認してみると以下のようなログがでてる
セッションに何か失敗している様子
/var/log/php/php.log:[06-Jul-2018 09:59:20 Asia/Tokyo] PHP Warning: session_start(): Unable to clear session lock record in /var/source/releases/20180705_2052_39/src/app/hoge.php on line 29
/var/log/php/php.log:[06-Jul-2018 09:59:20 Asia/Tokyo] PHP 3. session_start() /var/source/releases/20180705_2052_39/src/app/hoge.php:29
/var/log/php/php.log:[06-Jul-2018 09:59:20 Asia/Tokyo] PHP Warning: session_start(): Failed to read session data: memcached (path: 10.33.47.62:11211) in /var/source/releases/20180705_2052_39/src/app/hoge.php on line 29
/var/log/php/php.log:[06-Jul-2018 09:59:20 Asia/Tokyo] PHP 3. session_start() /var/source/releases/20180705_2052_39/src/app/hoge.php:29
調べてみるとロック取得に失敗している可能性が高い
ロック取得再試行回数や取得インターバルなどを調整
php.iniに以下を追記。
設定値の詳細は公式マニュアルを参照。
[memcached]
session.lazy_write = Off;
memcached.sess_lock_wait_min = 200;
memcached.sess_lock_wait_max = 1000;
memcached.sess_lock_retries = 20;
php設定を再読込
$ sudo systemctl restart php-fpm
有効な値を確認
$ php -i | grep -e memcached.sess_lock -e session.lazy_write
memcached.sess_lock_expire => 0 => 0
memcached.sess_lock_max_wait => not set => not set
memcached.sess_lock_retries => 30 => 30
memcached.sess_lock_wait => not set => not set
memcached.sess_lock_wait_max => 1000 => 1000
memcached.sess_lock_wait_min => 250 => 250
memcached.sess_locking => 1 => 1
session.lazy_write => Off => Off
あとは再現するかどうか待ってみる。