NB Questo è non un duplicato di PHP session_start() causing HTTP requests to hang (e altre domande con nome simile su SO), poiché il mio blocco è occasionale, non permanente.Perché PHP si blocca occasionalmente su session_start()
Utilizzo di Ubuntu 12.04,
Magento
, PHP-FPM (5.4)
e gestore di sessione PHP predefinito (con file su ext4).
inciso (once per month)
tutti i processi PHP appendere session_start()
(secondo 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 dice:
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
Secondo strace, tutti questi processi sono in attesa per il gregge (LOCK_EX)
, anche colui che ha la bandiera W nell'output lsof sopra.
L'utilizzo della CPU durante questo incidente è vicino a 0.
Allora perché il primo session_start
blocco, anche se sembra aver acquisito un blocco di scrittura sul file di sessione? Come posso eseguire il debug di questo ulteriore?
Questa è una discussione denominata "race condition with ajax and php sessions". In realtà, le richieste che attivano il problema sopra sono chiamate AJAX in modo coerente. Tuttavia, questo articolo stabilisce che:
Se hai utilizzato, sessione predefinita built-in di PHP gestione (che utilizza file), avrete mai incontrato il problema.
Così attualmente sono in perdita dove cercare dopo.
Prima di iniziare a pensare: DAMN bella domanda! modifica: Dopo aver pensato: sono senza tracce. – MoshMage
Una volta al mese? L'evento è regolare, intorno allo stesso giorno e all'ora? –
Disco non valido? Sarà difficile eseguirne il debug. – Brad