Как определить, какой файл ожидает Apache, когда WCHAN = flock_lock_file_wait - PullRequest
2 голосов
/ 22 августа 2011

У нас возникла проблема с нашими веб-серверами, из-за которой все больше и больше процессов 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 заблокирован или ожидает?

1 Ответ

2 голосов
/ 23 августа 2011

Вам нужно будет использовать lsof utiliy:

apt-get install lsof

lsof списка открытых файлов.С этим можно многое сделать, например, lsof -ni выведет список открытых сетевых подключений.Для ваших процессов Apache вы должны будете использовать опцию -p (PID):

lsof -p 730

И вы получите все открытые файлы и библиотеки (все файлы в Linux), так что, очевидно, выполучу файл блокировки.

...