LoginSignup
2
1

More than 5 years have passed since last update.

memcahedセッションロック取得失敗対策

Last updated at Posted at 2018-07-06

負荷試験最中接続が重い時がたまにあった。
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

あとは再現するかどうか待ってみる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1