Linux + Apache + Mysql + PHPサーバーの速度をプロファイリングするにはどうすればよいですか?
大幅に変更されたMediaWikiインスタンスを備えたサーバーをUbuntu 8.04で実行しています。それは少し遅いです-私はまだそれを最適化するために何もしていませんので、それをかなり速くするためにたくさんのぶら下がっている果物があると確信しています。
ただし、最適化するには、最初に測定する必要があります。どのコンポーネント(Apache、Php、Mysql)がページを提供するのに最大の時間を費やしているのかを知るにはどうすればよいですか?
ボトルネックを見つけるためにこのようなものをプロファイリングするときは、物事を1つずつ除外する必要があります。比較するには、ベースラインが必要です。 「ab」ツールがインストールされている場合(Apacheに付属)、これを使用できます。
ベースラインを取得するには、少なくとも数百のリクエストの平均を取得することをお勧めします。次に例を示します。
$ ab -n 400 http://yousite/
「リクエストごとの時間」の行の結果を見ると、次のようになります。
Time per request: 96.031 [ms] (mean)
これがベースラインであるため、その時間をメモしてください。
犯人としてApacheを除外するには、サーバー上に静的ページを作成し(遅い/遅いと思われるページのHTMLを保存するだけです)、再度abを実行します。
いくつかのPHPを静的ページにスローします。大量である必要はありませんが、実際に何らかの作業を行っている必要があります。 MediaWikiはかなり良いコードなので、システムにPHPのボトルネックがある場合、私のお金はPHPスタックをメモリに実際にロードしてテストを再実行することになります。
3つの数値を見て、次のステップとステップの間の最大のジャンプがどこにあるかを確認します。私の賭けは、MySQLが3つの中で最も遅いことですが、ページに大量の画像をロードしているために合計リクエスト時間が遅くなっている可能性があります。その場合は、デザインを再考する必要があります。ページ。
適切なサイズのMediaWikiインストールを実行しましたが、Memcachedインスタンスを使用することでMediaWikiに大きなメリットがあることがすぐにわかりました。それ以外の場合は、リクエストごとに多くの言語ファイルとユーザーデータをロードする必要があります。
また、preforkモジュールの構成も非常に重要です。/etc/Apache2/Apache2.conf..の特定のセクションの数を大幅に減らしました。それから、ページが最大1分間停止する大きなレイテンシがありました。ロードを完了する前に... drupalのtraceモジュールとdevelモジュールを使用したトレース、およびxdebugを使用したプロファイリングにより、私は無知になりました。APCをセットアップし、MYSQL confを変更しましたが、原因は実際にはpreforkモジュールには小さすぎる値でした。それらは中程度かつ十分なレベルになり、今やサーバーは超高速に戻っています。ページの実行時間が説明できないほど長い場合は、これらの数値に注意してください。
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
# original values:
# MaxSpareServers 10
# MaxClients 150
# far too conservative experimental values:
# MaxSpareServers 5
# MaxClients 5
# good compromise:
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>
これらの値は、512MiB RAM + 256MiBスワップ..サーバーの最適なものを見つけて頑張ってください;)の仮想ホスト環境用です。
Zombat および Frank FarmerStack Overflow 697802 でいくつかのニースの提案(遅いクエリの提案が好きです、私自身)を持っています。 ab for Apacheは、行った変更をテストするのにも非常に役立ちます。