2

Webサーバーに問題があり、ファイルロック(PHP flock()によって引き起こされる)が解決するのを待つApacheプロセスがどんどんスタックしていますが、解決することはありません。最終的に、サイトはどんどん遅くなり、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がロックされている/待機している正確なファイルを確認する方法はありますか?

4

1 に答える 1

2

lsofutiliyを使用する必要があります。

apt-get install lsof

lsofは、開いているファイルのリストを意味します。それを使って多くのことができますlsof -ni。たとえば、開いているネットワーク接続が一覧表示されます。apacheプロセスでは、-pオプション(PID)を使用する必要があります。

lsof -p 730

そして、開いているすべてのファイルとライブラリ(すべてがLinux上のファイルです)を取得するので、明らかにロックファイルを取得します。

于 2011-08-23T10:00:58.197 に答える