スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
コメント (-)
コメントの投稿
トラックバック (-)

ローカル環境のWordPressがたまに遅い問題

最近仕事でWordPressのプラグインを作っている。
これ自体は珍しいことではないのだが、新たにVMWare上で作ったローカルのテスト環境のWordPressがたまに遅くなっていた。
Ver3.0を使うのは今回が初めてなのだが、別のテストサーバーに試しに入れた環境では特に問題ない。
だからローカル環境の問題なのは間違いなかった。
すぐに思いつくものもなかったし、いつも遅いわけじゃないのでほっておいたが、作業に区切りがついたところで詳しく調べてみた。
まず状況は以下のとおり。

(1)たまに応答が数十秒かかるようになる
(2)応答待ちの間に他のページを開くと、それは普通に表示される
(3)phpmyadminなど、他のphpアプリでは問題ない

ちなみに環境はUbuntu10.4 Server Edition、Lighttpd + FastCGI + php-cgiという感じ。

phpmyadminが問題ないので、WebサーバーとMySQLの実行環境の問題ではなさそう。

まず同じような問題の事例を探して、バージョンチェックで遅くなるような話があった。
これは「wp-includes/update.php」の「wp_version_check」とかを消す、というような話だが、これでは解決しなかった。

仕方ないのでWPのソースにトレースをいれまくって、地道に場所を特定。

で、問題は「wp-includes/cron.php」の「spawn_cron」

ここの最後、

$cron_url = get_option( 'siteurl' ) . '/wp-cron.php?doing_wp_cron';
wp_remote_post( $cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) );

のところで止まっていた。

原因はすぐに思いついた。
このローカル環境ではSambaを使ってNetBios名を追加し、それを使ってバーチャルホストを組んでいた。
具体的には「job-dev」という名前を、「smb.conf」の「netbios aliases」に書き、lighttpdには「job-dev」というホスト名でバーチャルホストを設定する感じ。
なので上記のコードは「http://job-dev/~~~~/wp-cron.php?doing_wp_cron」にアクセスしに行くわけだが、先日インストールしたばかりのこのUbuntu10.4ではそれができない。
だってデフォルトではNetBios名による名前解決をしないから。
これは「/etc/nsswitch.conf」の「hosts」のところを、

hosts: files wins dns

という感じで"wins"を付け加えてあげると解決する。
必要になったら付け加えればいいやと思ってたが、ハマってから必要なことに気がつくんじゃ意味ないでした。

で、上記の設定を付け加えて、でもそれだけだとだめで、lighttpdを再起動でうまくいった。

一回上記のアクセスがちゃんと動けばしばらくは動かなくなる。
あと毎回遅いわけじゃないのは、1回動くと1分間は動かないから。
別のページを開くと大丈夫なのもこれが理由。

しかし面倒な動きだなぁ。
しかもこの動作が始まるきっかけになるアクション名がなぜか「sanitize_comment_cookies」。
なんか酷く無理やり付け加えてる感が。。。
「ALTERNATE_WP_CRON」を定義するとわざわざHTTPで再リクエストしなくなるみたいだけど、もう飽きたから調べてない。
コメント (0)
コメントの投稿
トラックバック (0)
前のページ(unattended-upgradesでmongodbをupdateする)
次のページ(IE8の表示モードとFC2ブログの大雑把な対処)
プロフィール

MAO

間男(MAO)

最新記事
カテゴリ
戯言 (38)
テンプレート (2)
検索フォーム
ブロとも申請フォーム

この人とブロともになる

リンク
このブログをリンクに追加する
RSSリンクの表示
google adsence
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。