APC (Alternative PHP Cache) をモニタリングする

2016年にもなって APC (Alternative PHP Cache) の話かよ!って感じもするけど,最近 APC の調査していて,個人的に学びが多かったので,主に apc.php に関してまとめておこうと思う.

前提

  • APC (Alternative PHP Cache)
    • PHP の実行コード(実行時に生成する中間コード)をキャッシュする機構
    • PHP: APC - Manual
  • OPcache
    • PHP 5.5 から APC より高性能な OPcache がビルトインとなった
    • よって APC を使うバージョンは PHP 5.3 / 5.4 などに限られる(完全にレガシー技術に)
    • PHP: OPcache - Manual

apc.php を設定する

APC をインストールすると apc.php という名前のモニタリングツールが同梱されている.環境によって異なるとは思うけど /usr/share/php-pecl-apc/apc.php あたりに存在しているかと思う.この apc.php をドキュメントルートにコピーして,以下の認証部分を任意の値で更新する.今回はサンプルとして apc / apc とした.

-defaults('ADMIN_USERNAME','apc');  // Admin Username
-defaults('ADMIN_PASSWORD','password');  // Admin Password - CHANGE THIS TO ENABLE!!!
+defaults('ADMIN_USERNAME','apc');  // Admin Username
+defaults('ADMIN_PASSWORD','apc');  // Admin Password - CHANGE THIS TO ENABLE!!!

認証を設定することで追加でモニタリングできる機能があるので,設定しておいた方が良いと思う.

  • Per-Directory Entries
  • User Cache Entries

なお,グラフを表示するために PHP: GD - Manual をインストールしておく.

調査観点

View Host Stats

キャッシュ状態のサマリを見ることができる.主に以下の項目を確認すると良いかと思う.

  • File Cache Information
    • Cached Files
      • APC にキャッシュしているファイル数と総サイズ
    • Cache full count
      • サイズ不足によってキャッシュから削除された回数
      • 1以上になっている場合 apc.shm_size を見直す必要がある
  • Host Status Diagrams
    • Memory Usage
      • Free / Used のバランスとフラグメントの状況
    • Hits & Misses
      • ヒット率
  • Detailed Memory Usage and Fragmentation
    • Fragmentation の割合が高くなっている場合,キャッシュクリアを検討する必要がある

f:id:kakku22:20160511214959p:plain

System Cache Entries

スクリプト (.php) 単位のキャッシュ状態を見ることができる.ソートや検索もできて凄く便利.

最初は Size でソートして,次に検索でドリルダウンしていくのが良いかと思う.

  • Sorting
    • Hits
    • Size
    • Script Filename
    • Last accessed
    • Last modified
    • Created at
    • Deleted at
  • Search
    • "app/classes" など任意のキーワードで絞り込むことができる

f:id:kakku22:20160511215017p:plain

Per-Directory Entries

ディレクトリパス単位のキャッシュ状態を見ることができる.

Group By Dir Level は便利で,以下のように appcore を比較したりできる.

  • Sorting
    • Total Hits
    • Total Size
    • Number of Files
    • Directory Name
    • Avg. Size
    • Avg. Hits
  • Group By Dir Level
    • None
    • 1~9

f:id:kakku22:20160511215029p:plain

User Cache Entries

APC では PHP: apc_store - Manual を使うとオブジェクトなどの任意の変数をキャッシュすることができる.今回は使ってないため割愛する.

まとめ

APC を使うとパフォーマンスは改善されると思うけど,継続的にモニタリングをして,アプリケーションに適したチューニングをしていく必要がある.そのために apc.php は必須のツールで,凄く便利だった.使ったことがなければ,是非導入を!(ってもう過去の PHP 使ってる人は少ないかもしれないけど...w)

APC を監視できるプラグインなど

php-fpm 関連記事

kakakakakku.hatenablog.com