web-dev-qa-db-ja.com

ページの実行時間を短縮するための最適なAPC設定

私はDrupal 7、php-fpmおよびApacheをワニスの後ろに、512 MBのRAMを備えたapcを持っています。

Develモジュールでページ実行時間を測定しています。

データベースのクエリ時間は、854ミリ秒のページ実行時間と比較して短い(62ミリ秒)。つまり、PHPおよびAPC設定に問題があります。

私の現在の設定はちょうどです

apc.shm_size = 64
apc.stat=1 

どうすれば改善できますか?

Drupalの上記の構成を考慮した場合の最適な設定は何ですか?

ありがとう

15
john

SVNプッシュ環境で実行するため、スクリプトでapcファイルキャッシュのみをクリアします。

APC設定:

apc.ttl=604800
apc.user_ttl=3600
apc.shm_size=192M
apc.include_once_override=1
auto_globals_jit=Off
apc.num_files_hint = 2048

apc.stat_ctime = 0
apc.file_update_protection = 2
apc.stat = 0

PHPスクリプト:

<?php
$return = apc_clear_cache('opcode');
echo var_export($return);

604800 = 1週間。

この後、 xdebug/xhprofを起動して実行中 で、キャッシュグラインドを実行すると、サイトの速度が低下している原因がわかります。簡単に言えば、キャッシュの分析は、Drupalを高速化するための最適な方法です。以下に、スピードアップに使用するパッチとモジュールをリストします。あなたの場合、それはおそらく異なるでしょう。

Drupal 6の具体的な回答は以下

この時点を過ぎて、APCがあなたの探しているものを提供しないことに気づいたら、 pressflow に切り替えて、これらのパッチを試してみてください:

また、これらのモジュールをいくつか試してみてください。サイトの速度が大幅に向上しました。

12
mikeytown2

これは、「文字列の質問の断片の長さ」の1つです。

大量のサイトに適しているのは、多数のモジュールがある少量のサイトと同じではなく、少数のモジュールのみが有効になっている中規模のサイトとは異なる場合があります。サーバー上で実行されている他のサイトも、APCが利用できるメモリを消費している可能性があります。

私の出発点は

apc.enabled=1
apc.shm_segments=1
apc.shm_size=64
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867=1

次に、サーバーの設定を調整しますが、すべての設定に適合する1つのサイズはありません。

Apc.php(おそらく/usr/share/pear/apc.phpにあります)を見つけて、DOCROOTにインストールし、Drupalをインストールします。Apacheの設定でIPアドレスにロックします。内部のユーザー名/パスワードを編集し、それを参照すると、APC統計が表示されます。

キャッシュミスを最小限に抑えるために、shm_sizeパラメータを再構成します。理想的には、ファイルのキャッシュミスが発生しないだけの十分なメモリと、APCユーザーキャッシュ用のメモリを追加する必要があります。

最適化TTLキャッシュチャーンを防止します。ファイルを編集していない場合は、この数を増やすことができます。

enable_cliは、drushを頻繁に使用する場合に便利です。そのため、drushはAPCからキャッシュされたファイルを使用します。

rfc1867はファイルのアップロードに便利です。

タイトルにphp-fpmがあることにも気づきました。これは問題を複雑にし、実際にはDrupal Answersの範囲を超えています。多くのシステム構成設定では対応していないため、 Server Fault でより良い応答を得ることができますDrupalに直接関係します。

3
mpdonadio

APCは、PHPファイルのロードと解析を向上させます。大部分は実行時間そのものでもあります。バグ(特にキャッシュ関連のバグ)を含む、実行時間を増加させる要因はたくさんあります。内部オーバーヘッド(例:drupal_alter()、module_implements())など。

あなたが尋ね、mikeytown2によってすでに提案されたように、ボトルネックがどこにあるかを見つけるためにxhprofを使用します(最近のxdebugよりも、結果への直接の迅速なアクセスを提供し、追加のツールを必要としないため、私はそれを好みます)。

私は最近 Drupal内でxhprofを使用典型的なボトルネック について2つのブログ投稿を書いています。

2
Berdir