NB Dies ist nicht ein Betrüger von PHP session_start() causing HTTP requests to hang (und andere ähnlich genannten Fragen zu SO), wie mein Fall ist gelegentlich, nicht dauerhaft.Warum hängt PHP gelegentlich auf session_start()
Verwendung Ubuntu 12.04,
Magento
, PHP-FPM (5.4)
und Standard-PHP-Session-Handler (mit Dateien auf ext4).
Übrigens (once per month)
alle PHP-Prozesse auf session_start()
hängen (nach 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 sagt:
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
Nach strace, all diese Prozesse warten auf Herde (LOCK_EX)
, sogar derjenige, der das W-Flag in der obigen Ausgabe hat.
Die CPU-Auslastung während dieses Vorfalls ist in der Nähe von 0.
Warum also der ersten session_start
hängen, auch wenn es eine Schreibsperre auf der Sitzungsdatei erworben zu haben scheint? Wie könnte ich das weiter debuggen?
Hier ist eine Diskussion namens "race condition with ajax and php sessions". In der Tat sind die Anfragen, die das obige Problem auslösen, konsistent AJAX-Anrufe. Allerdings heißt es in diesem Artikel, dass:
Wenn Sie PHP eingebaut, Standard-Session Handling verwendet haben (das verwendet -Dateien), die Sie nie über das Problem kommen.
Also momentan bin ich ratlos, wo ich als nächstes suchen soll.
Bevor ich anfangen zu denken: DAMN gute Frage! edit: Nach dem Nachdenken: Ich bin ahnungslos. – MoshMage
Einmal im Monat? Ist das Vorkommen regelmäßig, am selben Tag und zur gleichen Zeit? –
Schlechte Festplatte? Das wird schwer zu debuggen sein. – Brad