メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • APC動作の」確認

APC動作の」確認

php
performance optimaization
customization
apc
apache
xrea

Webページが重いのでAPCの導入

  • インストールされているDrupal:7.x
  • レンタルサーバー:Xrea(S502、PHP:5.4 FastCGI、Thread Safety: off)
  • フロントページを開くときに、長いときに20秒以上がかかります。
  • パフォーマンス向上のためAPCをインストールしました
    APCの設定は以下のようで
    apc.enabled = 1
    apc.shm_segments=1
    apc.shm_size = 64M
    apc.ttl = 3600
    apc.user_ttl = 7200
    apc.gc_ttl = 3600
    apc.max_file_size=1M
    apc.num_files_hint=100
    apc.user_entries_hint=4096
    apc.num_files_hint=20000
    apc.user_entries_hint=20000
    apc.stat = 0

APCの管理画面で確認するとキャッシュしたファイルが一つしかない

  • インストール、キャッシュの結果を見てみると、hits:1となって、キャッシュされたファイルが一つしかないです
  • キャッシュしたファイル詳細を確認してみたら、APCの管理画面(apc.php)自身でした。
  • 重要なファイル(Drupalで構築したサイトのファイル)がキャッシュされなくて、意味がないと思いました。

実際にはAPCがちゃんとDrupalで構築したサイトのファイルをキャッシュしている

  • いろいろな文書を参考にして、レンタルサーバー(xrea)でインストールしたPHPがFastCGIタイプなので、APCが違うプロセスのキャッシュが共有しないからでした。
  • 実際に、Drupalで構築したサイトの開始プログラム(index.php)に、apc.phpを呼び出して、無理やりにAPCの実行結果を出してみましたが、見事311ファイルがキャッシュしていました。
  • hits:23、misses:311になっています。
    • misses:311、311ファイルをキャッシュしていないではなく、初回キャッシュしたファイルがmissesとしてカウントされました
    • hits:23、23ファイルが複数回呼びさされているので、キャッシュされたファイルから返した記録でした。
    • これはCached Files:311なので、実際にキャッシュに入っていないファイルはないです。

PHPのFastCGIタイプがHTTPリクエストごとに違うプロセスでレスポンスを返す仕組み

  • PHPが2タイプがあります:moduleタイプとCGIタイプ
  • moduleタイプとCGIタイプの違いは以下の図で説明します
    • moduleタイプ:ウェブサーバー(Apache)に組み込まれ
    • CGIタイプ:各リクエストにThreadを立ち上げて実行し、レスポンスまでにこのプロセスが有効
    • APCがこのプロセス間のファイルキャッシュが共有しない
    • APCの管理画面(apc.php)が呼び出されたのはひとつのThreadなので、Drupalで構築したサイトのページ(index.php)の呼び出しは別のThreadとなるため、キャッシュされたファイルがひとつ(hits:1)となっている理由となります

CGIタイプでのAPCキャッシュが呼び出したときにキャッシュし始めるため、効果的ですか?

  • 同一ページを呼び出すために、違うThreadを立ち上げるため、前回のキャッシュが無効になって、1からキャッシュし直す
    • PHPのmoduleタイプのAPC実行結果と比べると、CGIタイプの同一ページを何回更新してもhits/missesの数が変わらない(moduleタイプは増える一方)
  • とすると、APCが一度で呼び出されたファイルのみをキャッシュして、そのプロセスに複数回で呼び出されたファイルをキャッシュされたメモリから返すとことになるため、いくつかの設定が簡単になる
    • 例:最大のキャッシュファイル数、サイズ、Statなど(増えることはないので、最初の測定値を利用すればよい)
    • プロセス間のキャッシュが共有されないため、キャッシュのライフタイム(ttl)の設定の意味がなくなる
  • 一度のみでのキャッシュのため、キャッシュの効果は疑問となる

 

ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)