SlideShare a Scribd company logo
2
Most read
3
Most read
4
Most read
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=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.save_comments=0
opcache.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.so
apc.enabled = 1
apc.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 ネーティブキャッシュで爆速化!

More Related Content

PDF
Zend OPcacheの速さの秘密を探る
PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PDF
Quick tour of PHP from inside
PPTX
PHP と SAPI と ZendEngine3 と
PDF
Phpをいじり倒す10の方法
PPTX
php and sapi and zendengine2 and...
PDF
realpathキャッシュと OPcacheの面倒すぎる関係
PPTX
std::pin の勘所
Zend OPcacheの速さの秘密を探る
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Quick tour of PHP from inside
PHP と SAPI と ZendEngine3 と
Phpをいじり倒す10の方法
php and sapi and zendengine2 and...
realpathキャッシュと OPcacheの面倒すぎる関係
std::pin の勘所

What's hot (20)

PDF
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
PDF
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
PDF
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
PPTX
テストコードの DRY と DAMP
PDF
OPcache の最適化器の今
PDF
がんばれ PHP Fiber
PDF
PHPの今とこれから2022
PDF
InnoDBのすゝめ(仮)
PDF
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
KEY
MAP 実装してみた
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
PPTX
イケてない開発チームがイケてる開発を始めようとする軌跡
PDF
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
PDF
Dockerからcontainerdへの移行
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PDF
PHP7の内部実装から学ぶ性能改善テクニック
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
PDF
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
PDF
月間10億pvを支えるmongo db
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
テストコードの DRY と DAMP
OPcache の最適化器の今
がんばれ PHP Fiber
PHPの今とこれから2022
InnoDBのすゝめ(仮)
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
MAP 実装してみた
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
イケてない開発チームがイケてる開発を始めようとする軌跡
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
Dockerからcontainerdへの移行
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PHP7の内部実装から学ぶ性能改善テクニック
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
カスタムメモリマネージャと高速なメモリアロケータについて
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
月間10億pvを支えるmongo db
Ad

Viewers also liked (20)

PDF
PHP 5.5 Zend OPcache
PPTX
PHPのキャッシュを使いこなせ!
PDF
PHPの今とこれから 2013
PDF
IbisPaintのOpenGLES2.0
PDF
PHPの今とこれから2014
PPTX
PHP7実環境ベンチ2016春
PDF
実録 WordPress Twenty Sixteen のカスタマイズ | WordBench東京 2月勉強会 「みんなのテーマ開発」〜自分の好きな作り方...
PDF
Unity恐くないよ!!
PPTX
PHPバージョン別応答速度比較
PDF
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PDF
Webの未来 〜 PNaClとasm.jsでカワルミライ - いま、モバイルWebの先端で起こっていること
PDF
PHP5.6からPHP7.0への移行
PDF
家庭用ブロードバンドルータ上でWordPressを動かそう
PDF
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
PDF
PHPの今とこれから2015
PDF
Code igniterを初めて使うときにはまった4つのポイント
PPTX
PHP7ではなくHack/HHVMを選ぶ理由
PPTX
Jenkins 2.0 (日本語)
PDF
Unityとスマートフォンアプリの最適化
PDF
WordCamp Tokyo2016itkaasan
PHP 5.5 Zend OPcache
PHPのキャッシュを使いこなせ!
PHPの今とこれから 2013
IbisPaintのOpenGLES2.0
PHPの今とこれから2014
PHP7実環境ベンチ2016春
実録 WordPress Twenty Sixteen のカスタマイズ | WordBench東京 2月勉強会 「みんなのテーマ開発」〜自分の好きな作り方...
Unity恐くないよ!!
PHPバージョン別応答速度比較
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Webの未来 〜 PNaClとasm.jsでカワルミライ - いま、モバイルWebの先端で起こっていること
PHP5.6からPHP7.0への移行
家庭用ブロードバンドルータ上でWordPressを動かそう
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
PHPの今とこれから2015
Code igniterを初めて使うときにはまった4つのポイント
PHP7ではなくHack/HHVMを選ぶ理由
Jenkins 2.0 (日本語)
Unityとスマートフォンアプリの最適化
WordCamp Tokyo2016itkaasan
Ad

Similar to PHP 5.5ネーティブキャッシュの話 (20)

PDF
Java EE7 䛸㻌JCache 
PDF
Railsの運用について
PDF
Caching ガイダンスの話
PDF
20120117 13 meister-elasti_cache-public
PPTX
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
PDF
Amazon ElastiCache - AWSマイスターシリーズ
PDF
Webサーバのチューニング
PDF
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
PDF
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
PDF
20121205 nosql(okuyama fs)セミナー資料
PDF
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
PPTX
Flumeを活用したAmebaにおける大規模ログ収集システム
PDF
PDF
VarnishCache入門Rev2.1
PPT
Cake Php キャッシュのやり方
PDF
これからのNashorn
KEY
Alfrescoクラスタリング入門
PDF
[db tech showcase Tokyo 2014] B25: [In-Memory DB: SAP HANA] 障害・災害対策のメカニズム by...
PPTX
PHP基礎勉強会
Java EE7 䛸㻌JCache 
Railsの運用について
Caching ガイダンスの話
20120117 13 meister-elasti_cache-public
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
Amazon ElastiCache - AWSマイスターシリーズ
Webサーバのチューニング
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
20121205 nosql(okuyama fs)セミナー資料
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
徳丸本に載っていないWebアプリケーションセキュリティ
Flumeを活用したAmebaにおける大規模ログ収集システム
VarnishCache入門Rev2.1
Cake Php キャッシュのやり方
これからのNashorn
Alfrescoクラスタリング入門
[db tech showcase Tokyo 2014] B25: [In-Memory DB: SAP HANA] 障害・災害対策のメカニズム by...
PHP基礎勉強会

More from Rui Hirokawa (20)

PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PDF
PHPの今とこれから2024 at PHP Conference Japan 2024
PDF
PHPの今とこれから2023
PDF
PHPの今とこれから2021
PDF
PHPの今とこれから2020
PDF
PHPの今とこれから2019
PDF
日本PHPユーザ会の紹介
PDF
PHPの中の人によるパネルディスカッション
PDF
PHPの今とこれから2009
PDF
PHPの今とこれから2008
PDF
PHPの今とこれから2007
PDF
PHPの今とこれから2006
PDF
PHPの今と未来を語る
PDF
PHPの今と未来を語る
PDF
php.netの歩き方
PDF
PHP4の今 ~日本語対応と最近のトピックス~
PDF
PHPの今とこれから2017
PDF
PHPの今とこれから2018
PDF
PHP Now and then 2018 : WordPress Special Edition
PDF
PHPの今とこれから2016
PHPの今とこれから2025 (PHP Conference Japan 2025)
PHPの今とこれから2024 at PHP Conference Japan 2024
PHPの今とこれから2023
PHPの今とこれから2021
PHPの今とこれから2020
PHPの今とこれから2019
日本PHPユーザ会の紹介
PHPの中の人によるパネルディスカッション
PHPの今とこれから2009
PHPの今とこれから2008
PHPの今とこれから2007
PHPの今とこれから2006
PHPの今と未来を語る
PHPの今と未来を語る
php.netの歩き方
PHP4の今 ~日本語対応と最近のトピックス~
PHPの今とこれから2017
PHPの今とこれから2018
PHP Now and then 2018 : WordPress Special Edition
PHPの今とこれから2016

PHP 5.5ネーティブキャッシュの話