SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【apache】 flock_lock_file_wait しているとき

問題

Webサーバーがどうも様子がおかしく、httpd のプロセスがたくさん発生して、flock_lock_file_wait がたくさん出てるらしい。

答え

プロセスがスリープしている状況を確認(どこで止まっているか)

# ps -o pid,tt,user,fname,wchan -C httpd

  PID TT       USER     COMMAND  WCHAN
 8930 ?        root     httpd    -
12198 ?        apache   httpd    -
12299 ?        apache   httpd    flock_lock_file_wait
12619 ?        apache   httpd    flock_lock_file_wait
12621 ?        apache   httpd    flock_lock_file_wait
12629 ?        apache   httpd    -
12631 ?        apache   httpd    flock_lock_file_wait
12640 ?        apache   httpd    flock_lock_file_wait
(以下たくさん略)

なんだか大変そうだ。

特定のプロセスが使用中のファイルを調べる

# lsof -p 12299

COMMAND   PID     USER   FD   TYPE   DEVICE  SIZE/OFF      NODE NAME
httpd   12299 apache    cwd    DIR    253,0      4096  59082247 /home/foo/bar/htdocs
httpd   12299 apache    rtd    DIR    253,0      4096         2 /
httpd   12299 apache    txt    REG    253,0   1210254  12714320 /usr/local/apache2/bin/httpd
httpd   12299 apache    mem    REG    253,0     45432  92408476 /lib/libcrypt-2.5.so
(中略)
(アクセスログのファイルとかいろいろ)
(中略)
httpd   12299 apache     20u  IPv4 95837180       0t0       TCP 192.168.123.13:58301->192.168.123.12:mysql (ESTABLISHED)
httpd   12299 apache     21u   REG    253,0       100  38235319 /tmp/sess_a104b06c9257ee578b6d287077a2aca9

最後にセッションファイルが出てきた。

確かにphpのデフォルトのセッションはファイルをロックするけど、これが直接の原因ということはないんじゃないか。

逆にこのファイルを使っているのは誰?

# lsof /tmp/sess_a104b06c9257ee578b6d287077a2aca9
 
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
httpd   12198 apache     21uW  REG  253,0      100 38235319 /tmp/sess_a104b06c9257ee578b6d287077a2aca9
httpd   12299 apache     21u   REG  253,0      100 38235319 /tmp/sess_a104b06c9257ee578b6d287077a2aca9
httpd   13161 apache     21u   REG  253,0      100 38235319 /tmp/sess_a104b06c9257ee578b6d287077a2aca9

あるプロセスがファイルをつかんでいて、2つのプロセスは待ちをしているっぽい。

12299、13161 が flock_lock_file_wait してて、それは 12198 がファイルをつかんでいるのが原因っぽい感じ。

12198 は何をしているの?

# lsof –p 12198
(前略)
httpd   16765 apache     18r  0000     0,11         0  96194490 eventpoll
httpd   16765 apache     19u  IPv4 96195573       0t0       TCP 192.168.123.123:http->pw1262052
httpd   16765 apache     20u  IPv4 96195574       0t0       TCP 192.168.123.124:39790->192.16
httpd   16765 apache     21uW  REG    253,0       370  40006494 /tmp/sess_17e7954240033a6d55
httpd   16765 apache     22r   DIR    253,0 312377344  37584897 /tmp

あれ? /tmp を読むのがそんなに大変???

ここで /tmp の中身が気になる。

ちょっと /tmp の中身何個あるの

# ls /tmp | wc
2735929 2735929 175389370

( д) ゚ ゚

サーバーさん大変でしたね… 1つのフォルダに300万個近いファイルが作られていたとは… すみません今消します…

別の切り口からもっと早くここにたどり着けたかもしれない。vmstat みたらなんかおかしいし。

みたいなことをしている日もあります。

関連するメモ

コメント