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
を見直す必要がある
- Cached Files
- Host Status Diagrams
- Memory Usage
- Free / Used のバランスとフラグメントの状況
- Hits & Misses
- ヒット率
- Memory Usage
- Detailed Memory Usage and Fragmentation
- Fragmentation の割合が高くなっている場合,キャッシュクリアを検討する必要がある
System Cache Entries
スクリプト (.php) 単位のキャッシュ状態を見ることができる.ソートや検索もできて凄く便利.
最初は Size
でソートして,次に検索でドリルダウンしていくのが良いかと思う.
- Sorting
- Hits
- Size
- Script Filename
- Last accessed
- Last modified
- Created at
- Deleted at
- Search
- "app/classes" など任意のキーワードで絞り込むことができる
Per-Directory Entries
ディレクトリパス単位のキャッシュ状態を見ることができる.
Group By Dir Level
は便利で,以下のように app
と core
を比較したりできる.
- Sorting
- Total Hits
- Total Size
- Number of Files
- Directory Name
- Avg. Size
- Avg. Hits
- Group By Dir Level
- None
- 1~9
User Cache Entries
APC では PHP: apc_store - Manual を使うとオブジェクトなどの任意の変数をキャッシュすることができる.今回は使ってないため割愛する.
まとめ
APC を使うとパフォーマンスは改善されると思うけど,継続的にモニタリングをして,アプリケーションに適したチューニングをしていく必要がある.そのために apc.php
は必須のツールで,凄く便利だった.使ったことがなければ,是非導入を!(ってもう過去の PHP 使ってる人は少ないかもしれないけど...w)
APC を監視できるプラグインなど
- mackerel-agent-plugins/mackerel-plugin-php-apc at master · mackerelio/mackerel-agent-plugins · GitHub