PHP 5.5ネーティブキャッシュの話
-
Upload
rui-hirokawa -
Category
Technology
-
view
8.131 -
download
1
description
Transcript of PHP 5.5ネーティブキャッシュの話
PHP5.5 ネーティブキャッシュの話
廣川 類 @rui_hi
PHPカンファレンス2013
2013年9月14日(土)
�キャッシュとは? データを再利用する仕組み
�オペコードキャッシュとは?
コンパイル後のバイトコードを共有メモリに保持、再利用することで、
パース/コンパイルの時間・負荷をなくす。
�キャッシュの利点: 応答速度改善、サーバ負荷低減
�実行形態:サーバ組込型:APC, Xcache, OPcache 等、分散型: memcache
キャッシュとは?
クライアント( Webブラウザ )
クライアントクライアントクライアントクライアントキャッシュキャッシュキャッシュキャッシュ
ページキャッシュページキャッシュページキャッシュページキャッシュ
データデータデータデータキャッシュキャッシュキャッシュキャッシュ
オペコードオペコードオペコードオペコードキャッシュキャッシュキャッシュキャッシュ
出力
PHPスクリプト
レスポンス
リクエストWebサーバー/PHP
フラグメントキャッシュフラグメントキャッシュフラグメントキャッシュフラグメントキャッシュ
コンパイル
出力キャッシュ出力キャッシュ出力キャッシュ出力キャッシュ
実行
関数APIDB
パース
�オペコードキャッシュはPHP 4時代から重要技術
� スクリプトエンジンと一体で動作するため、開発が難しい
� 新バージョンへの追従遅延、動作不安定等の問題を発生
�APC 3.1.14 公開キャンセル(2013/2): 深刻なメモリの問題
� PHP 6でのAPC標準搭載化:PHP 6開発中断により延期
Opcache標準採用の流れ
https://wiki.php.net/rfc/optimizerplus
�Zend Optimizer+をOSS化, PHP 5.5組込を提案(2013/1)
� Zend Optimizer+ から Zend OPcacheに改名(2013/3)
�投票により採用決定(PHP 5.5リリースは2ヶ月遅延)(2013/3)
OPcacheの特徴
�ユーザのメリット
�標準的に使用できる
�最新版に追従
�安定化
�APCとの違い
OPcache APC
対応PHPバージョン 5.2~5.5 5.2~5.3, 5.4(β)
使用後メモリ管理 破棄→再起動 再利用
実行速度 1~1.2 1
付加機能 最適化 データキャッシュ,プリロードアップロード進捗表示,最適化
OPcacheインストール
�インストール
�ソースコードから組込
PHP 5.5 :バンドル、PHP 5.2~5.5はPECL, github
� configure に --enable-opcache オプション指定
� php.ini 設定
zend_extension=/usr/local/lib/php/20121212/opcache.so
opcache.enable=1
Zendエクステンションとして読込み(フルパス指定)
Opcache有効化(デフォルト:有効)
php.ini 推奨設定オプション
opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1
opcache.save_comments=0opcache.enable_file_override=1
性能向上が期待できるが注意を要するオプション
最大メモリ
最大メモリ(文字列)
最大ファイル数
更新確認間隔[s]再起動高速化
PHPDocキャッシュ除外
ファイル存在確認処理を代替
性能向上が期待できるオプション(要調整)
オプション (opcache. 省略) デフォルト 説明
enable On OPcache有効/無効
memory_consumption 64 使用メモリ[MB]
interned_string_buffer 4 内部文字列用メモリ[MB]
max_accelerated_files 2000 キャッシュ用ハッシュキーの最大数
validate_timestamps On 更新日付に基づきキャッシュ更新
revalidate_freq 2 タイムスタンプ更新確認間隔[s]
revalidate_path Off include_path探索最適化有効/無効
optimization_level 0xffffffff 特定の最適化を有効/無効
enable_file_override Off ファイル存在確認関数をオーバーライド
OPcache主要設定オプション(1)
■ 基本オプション、最適化
オプションオプションオプションオプション (opcache. 省略省略省略省略) デフォルトデフォルトデフォルトデフォルト 説明説明説明説明
blacklist_filename “” キャッシュ対象外とするファイルを指定
max_file_size 0 キャッシュ対象ファイルの最大サイズ
restrict_api “” キャッシュ対象の先頭文字列を指定
save_comments On PHPDocコメント有効/無効
load_comments On 共有メモリからPHPDocコメントをロード
OPcache主要設定オプション(2)
オプション (opcache. 省略) デフォルト 説明
force_restart_timeout 180 指定秒経過時に強制再起動
max_wasted_percentage 5 廃棄済みメモリが指定%を越えると再起動
use_cwd On カレントディレクトリをキーに追加(衝突回避)
error_log “” エラーログファイル名
log_verbosity_level 1 エラーログ詳細度(0..4)
fast_shutdown Off 高速シャットダウン処理有効/無効
■ キャッシュ対象を指定/限定(互換性に注意)
■ 安定性/デバッグ
ベンチマーク
req/sec nominal Opcache APC 最適化無し
PHP 5.5 23.42 62.40 (+166%)
56.52(+10%)
57.65(+8%)
PHP 5.4 23.06 60.56(+163%)
55.88(+8%)
58.79(+3%)
PHP 5.3 22.30 49.04(+120%)
45.53(+8%)
47.12(+4%)
ab -n 1000 -c 20 http://www.example.com/ � WordPress 3.6 (Ubuntu 13.04, nginx 1.2.6)
40
50
60
70
キャッシュなし
キャッシュ管理コンソール
� キャッシュ管理コンソール
https://github.com/rlerdorf/opcache-status
� Opcacheはデータキャッシュをサポートしない
�データキャッシュ用エクステンション:
APCu 、Yac 、memcache等を使う
�APCuの関数APIはAPC互換:既存のプラグイン等を使用可能
�キャッシュに保存: apc_store($key, $var);
�キャッシュから取得: $var = apc_fetch($key);
APCuによるユーザキャッシュ
extension = apcu.soapc.enabled = 1apc.shm_size = 32M
� PECL, githubで公開� 構築: configureに –enable-apcu オプション指定
� 設定オプション
オプション (apc. 省略) デフォルト 説明
enabled On APCu有効/無効
preload_path “” 初期化時にプリロードするパス
shm_size 32 共有メモリの大きさ[MB]
shm_segments 1 共有メモリセグメント数
ttl 0 アクセス有効時間[s]
gc_ttl 3600 キャッシュがGCリストに残る時間[s]
smart 0 expungeを実行する有効メモリ割合
entries_hint 4096 キャッシュ中に存在する変数の数の予測値
slam_defense 1 キーのslammingを防止
serializer php シリアライザを指定
rfc1867 0 ファイルアップロードメータ機能有効
rfc1867_prefix “upload_” アップロード時に生成される変数の接頭辞
rfc1867_name “APCu_UPLOAD_PROGRESS” フォーム変数
rfc1867_freq 0 更新間隔[%または大きさ]
APCu主要設定オプション
�管理コンソール:apc.php
サーバ状況の監視、キャッシュの個別管理が可能
APCu管理コンソール
Opcache + APCuベンチマーク
WordPress 3.6 (Ubuntu 13.04, nginx 1.2.6)APC Object Cache Backend (http://http://wordpress.org/plugins/apc/)
[1] データ(オブジェクト)キャッシュ: Tribe Object Cache[2] ページキャッシュ: Batcache
クライアント( Webブラウザ )
クライアントクライアントクライアントクライアントキャッシュキャッシュキャッシュキャッシュ
ページキャッシュページキャッシュページキャッシュページキャッシュ
データデータデータデータキャッシュキャッシュキャッシュキャッシュ
オペコードオペコードオペコードオペコードキャッシュキャッシュキャッシュキャッシュ
出力
PHPスクリプト
レスポンス
リクエストWebサーバー/PHP
フラグメントキャッシュフラグメントキャッシュフラグメントキャッシュフラグメントキャッシュ
コンパイル
出力キャッシュ出力キャッシュ出力キャッシュ出力キャッシュ
実行
関数APIDB
パース
Opcache Opcache+APCu+[1] Opcache+APCu+[2]
58.48 67.18 (+15%) 2197.18 (+3657%)
� PHP 5.5でついにオペコードキャッシュ標準搭載化!
�今後、PHPと共に進化していく(はず)
� アプリケーション、環境毎にパラメータ調整が必要
まとめ
PHP 5.5 ネーティブキャッシュで爆速化!