注意這是而不是一個愚蠢的PHP session_start() causing HTTP requests to hang(和其他類似命名的問題上SO),因爲我的掛鉤偶爾,而不是永久性的。爲什麼PHP偶爾掛在session_start()
使用Ubuntu 12.04,
Magento
,PHP-FPM (5.4)
和默認的PHP會話處理程序(在ext4上有文件)。
順便提及(once per month)
所有PHP進程上session_start()
掛起(根據FPM-的slow.log):
[24-Sep-2014 11:03:04] [pool www] pid 24259
script_filename = /data/web/public/index.php
[0x00007f00b4ec6480] session_start() /data/web/public/includes/src/__default.php:7687
[0x00007f00b4ec6130] start() /data/web/public/includes/src/__default.php:7730
[0x00007f00b4ec5fb8] init() /data/web/public/includes/src/__default.php:8086
[0x00007f00b4ec5e30] init() /data/web/public/includes/src/__default.php:33902
[0x00007f00b4ec5bd0] __construct() /data/web/public/includes/src/__default.php:23841
[0x00007f00b4ec5ae8] getModelInstance() /data/web/public/app/Mage.php:463
[0x00007f00b4ec59c8] getModel() /data/web/public/app/Mage.php:477
[0x00007f00b4ec49a0] getSingleton() /data/web/public/includes/src/__default.php:14044
[0x00007f00b4ec4848] preDispatch() /data/web/public/includes/src/Mage_Adminhtml_Controller_Action.php:160
[0x00007f00b4ec3b00] preDispatch() /data/web/public/includes/src/__default.php:13958
[0x00007f00b4ec26e0] dispatch() /data/web/public/includes/src/__default.php:18331
[0x00007f00b4ec20c0] match() /data/web/public/includes/src/__default.php:17865
[0x00007f00b4ec1a98] dispatch() /data/web/public/includes/src/__default.php:20465
[0x00007f00b4ec1908] run() /data/web/public/app/Mage.php:684
[0x00007f00b4ec17f8] run() /data/web/public/index.php:87
LSOF說:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php5-fpm 24259 app 10uW REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 24262 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 24351 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 24357 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 24358 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 25563 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
php5-fpm 25564 app 10u REG 202,1 82492 1220594 /data/web/public/var/session/sess_gr2clur9icgd7s2j9linag7ue6
根據strace的,所有這些過程都在等待羊羣(LOCK_EX)
,即使是在上面的lsof輸出中具有W標誌的人也是如此。
此事件中的CPU佔用率接近0
那麼,爲什麼第一session_start
竅門,即使它現在似乎有了會話文件的寫鎖?我怎麼能進一步調試呢?
這是一個名爲「race condition with ajax and php sessions」的討論。事實上,引發上述問題的請求都是一致的AJAX調用。但是,本文指出:
如果您使用過PHP的內置默認會話處理(使用 文件),您將永遠不會遇到問題。
所以目前我不知道下一步該去哪裏。
之前,我開始思考:該死的好問題!編輯:思考後:我很無能。 – MoshMage 2014-09-24 13:08:16
每月一次?事件發生在同一天和同一時間嗎? – 2014-09-24 13:42:20
壞盤?這將是一個很難調試。 – Brad 2014-09-24 13:48:20