У нас есть проблема с нашими веб-серверами, в которой все больше и больше процессов Apache застревают в ожидании блокировки файла (вызванной PHP flock()), чтобы как-то разрешить, но никогда этого не происходит. В конце концов сайт становится все медленнее и медленнее и, наконец, полностью останавливается, пока Apache не будет перезапущен.
Я работаю над теорией, что за этим стоит какой-то плохой код, возможно, в нашем доморощенном механизме дискового кэша. Но я не могу это отследить. (Мы работаем на Ubuntu.)
Мой вопрос в том, как я могу определить, в каком файле или файлах он застревает? Если бы я мог видеть, где зависание, мне было бы намного легче выяснить, где находится плохой код. Когда я делаю эту команду:
ps -o pid,tt,user,fname,wchan -C apache2
Я получаю это:
730 ? www-data apache2 flock_lock_file_wait
3085 ? www-data apache2 flock_lock_file_wait
5393 ? www-data apache2 flock_lock_file_wait
5397 ? www-data apache2 flock_lock_file_wait
11181 ? www-data apache2 flock_lock_file_wait
30280 ? www-data apache2 flock_lock_file_wait
Есть ли способ перейти от этого к тому, чтобы увидеть, какой именно файл Apache заблокирован / ждет?