WordPressを速くするにはキャッシュしかない!

漸くわかりました。PHPを速くするのは限界があるみたいで、生成したHTMLをキャッシュしとくしかないみたいです。

で、Quick Cacheプラグインをインストールして有効にすると改善しました。

WordPress with Quick Cache

WordPress with Quick Cache

レイテンシ12ms、転送4msです。

ハードウエアのスペックでごり押しはだめですね。ちゃんとキャッシュできるところはしましょうってことです。

WordPressはどうすれば速くなるのか、検証実験

さっきの投稿でWordPressが遅い事を書きました。で、先輩のさくらのVPS(nginx+fastcgi)では速いってことも書きました。

ということで、僕も借りてるさくらのVPSで一からセットアップして実験してみました。OSはデフォルトではなくUbuntu 10.04が入ってます。

今回検証したのは、WebサーバーはApache/2.2.14とnginx/1.0.9、RDBMはMySQL(Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1)とPostgreSQL/8.4.9です。なので、合計4通りですね。

Apacheではmod_phpで、nginxでは後ろでspawn-fcgiが動いてます。

で、試してみた結果です。今回検証したいのは静的ファイルではなくPHPの出力なので、画像とかCSSがブラウザでキャッシュされてたりするのは気にしないでください。

Apache + MySQL + WordPress

Apache + MySQL + WordPress

Apache + PostgreSQL + WordPress

Apache + PostgreSQL + WordPress

nginx + MySQL + WordPress

nginx + MySQL + WordPress

nginx + PostgreSQL + WordPress

nginx + PostgreSQL + WordPress

平均もとってない1回こっきりのアクセスの結果なので互いの比較はそんなに意味がないです。

が、どれもレイテンシが数百ミリ秒あります。これは何回試しても同じでした。

あれ?…

先輩のVPSと同じ環境のはずなのになんでこんなに違うの?

WordPressが遅い…なぜ?

最近サーバーの設定を変えたり、リバースプロキシをしてる、HTTPのフロントをApacheからnginxに変えたり高速化を試みています。

が、どうしてもこのブログ(にかぎらず、稼働しているWordPress全部)が重い、というより遅いのです。
Memcachedでオブジェクトをキャッシュしてみたりしても改善されず…

で、Safariで開発ツールの「ネットワーク」をつかって取得の時間を見てみました。

Apache(mod_php) + WordPress 処理時間

Apache(mod_php) + WordPress ネットワーク時間

ここでPHPのファイルへのアクセスのレイテンシが334msもあることに気づきました。稼働しているどのWordPressもです。

で、WordPressはそうなのかと、さくらのVPSで運用してる先輩のWordPressを見てみると…

 

さくらのVPS nginx + WordPress(fast-cgi)

さくらのVPS nginx + WordPress(fast-cgi)

速い….レイテンシ45msです。静的ファイルはうちのサーバーのほうがレイテンシ含め速いので(どちらも304なので比較していいかな)、ネットワーク等の問題ではないみたい。

(あと、向こうはnginx+fastcgi(swanかな?)+WordPressですが、うちでもnginx+fastcgiにしてみたけど改善せず…)

なんで?

とりあえず、僕も借りてるさくらのVPSでDBをMySQLからPostgreSQLにしてみたり、いろいろ実験してみます。

 

 

Ubuntuでレンタルサーバ その2

前回に引き続き、今回はProFTPdをセットアップし、MySQLのテーブルに記録されたユーザー情報で認証できるようにします。

まずはProFTPdのセットアップから。proftpdをapt-getでinstallするとproftpdの設定画面が出ます。

ProFTPd セットアップ

ProFTPd セットアップ

固定IPではないのでIPマスカレードを利用しないといけませんが、そのためにもスタンダードアローンではなくinetd経由にします。

それでは /etc/proftpd/proftpd.conf を書き換えていきます。

  • ServerName を好きな文字列に
  • ListOptions を “-l” に “-la” に
  • PassivePorts をコメントアウトして ポート範囲を決定(デフォルトは49152 65534)
  • MasqueradeAddress を コメントアウトして hogehoge.net(ドメイン名)に
  • ServerIdent を off で追加
  • RootLogin を off に
  • DefaultRoot を ~ に
  • RequireValidShell を off に

ここまではMySQLによる認証は関係ありません。これからMySQLで認証するための設定を追記します。この部分は「にわか鯖管のメモ – ProFTPD ~ MySQL + quota 編 ~」をもとにというかそのまま。

注意点はmodule.confをいじったときは sudo /etc/init.d/proftpd reload をしないとだめってとこです。

Ubuntuでレンタルサーバ その1

今日からUbuntuでレンタルサーバを構築するまでの記録を載せようと思います。まぁ気力が続けばですけど。

それと、メモみたいなもので解説はたぶんしないとおもいます。LinuxをCUIで使えるぐらいの知識がないともしかすると読めないかもしれないです。解説でなく日記ですね。

レンタルサーバといっても身内、友人、後輩などに貸してるだけですのであまりセキュリティ、特にユーザー間のセキュリティはよろしくない設定をしていくかもしれませんのでそういう意味でもあまり当てにはしないでくださいね。

で、なぜいまさらサーバー構築なのかということなのです。普段はMac OSX Serverの上でこのページ含め個人のサーバと上記のレンタル部分とを稼動させているのですが、いわゆる公私混同の部分の管理がめんどくさくなってきた(なんとなくしんどくなってきた)ので他人の分は仮想環境のUbuntuに移動させてしまおうと思い立ったわけです。

で現状は、Ubuntu 10.04 ServerをLAMP + SSHのみでインストールしたまでです。

このあとユーザー情報をMySQLで管理してユーザーごとにApacheのバーチャルホストを設定し、proftpdはMySQL上の情報で認証できるようにしていくことが目標です。