注意这是而不是一个愚蠢的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