Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OPCache preloadの話 / opcache_preload
Search
Ryo Tomidokoro
February 26, 2020
Programming
3
320
OPCache preloadの話 / opcache_preload
OPCache preloadの解説
Ryo Tomidokoro
February 26, 2020
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
190
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.1k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
51k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.4k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.5k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.4k
Other Decks in Programming
See All in Programming
CSC509 Lecture 06
javiergs
PRO
0
250
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
220
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
420
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
360
Model Pollution
hschwentner
1
190
CSC305 Lecture 06
javiergs
PRO
0
210
Local Peer-to-Peer APIはどのように使われていくのか?
hal_spidernight
2
460
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
670
dynamic!
moro
9
6.8k
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
160
Playwrightはどのようにクロスブラウザをサポートしているのか
yotahada3
7
2.3k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Embracing the Ebb and Flow
colly
88
4.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Producing Creativity
orderedlist
PRO
347
40k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
How STYLIGHT went responsive
nonsquared
100
5.8k
Faster Mobile Websites
deanohume
310
31k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Transcript
@hanhan1978 OPCache preloadの話 PHP勉強会 2020/2/26
本日のテーマ OPCache preloadを完全に 理解する。
OPCache preload とは?
PHP7.4から追加 https://wiki.php.net/rfc/preload
• OPCacheの設定項目 • 実行速度が速くなる
OPCacheのおさらい
PHPはスクリプト言語 • 実行時にコンパイル • コンパイル&実行を繰返す
例えば
PHPスクリプト実行の流れ
None
None
None
具体例1
ファイル構成
index.php
autoload.php
A.php
B.php
実行すると
実行の流れ
4回のコンパイル
• compile結果はキャッシュさ れる • 次回はキャッシュが使われる ので実行が早い
preloadが達成すること
• SAPI起動時にキャッシュ • 最初からコンパイル済みの状 態になる
具体例2
ファイル構成
preload.php
php.ini
実行すると
実行の流れ
3回のコンパイル
• autoloadが省略される • preload以外のファイルは opcache.validate_timestamp=0と 同じ挙動 • 直接のrequireはpreloadが活用さ れない
PHPソース v7.4.3
ext/opcache/ZendAccelarator.c - SAPI起動時に L4200 preload_load() - globalなデータ領域にpreloadしたクラス、ファイルの情報を登 録する - opcodes実行時のコンパイルに使われるのは、L1914
persistent_compile_file。これはpreloadの有無に依らない
Zend/zend_execute_API.c - L1419 zend_fetch_class_by_name が未解決のクラス名 に対してコールされる - zend_hash_findでコンパイル済みのクラスが発見されれ ば、それを使う(preload) -
それ以外は、autoloaderを使ってクラスの解決が行われて、 ファイルが見つかればコンパイルされる
preloadの現状
• 7.4.2でWindowsが対象外に • 内部クラス等、一部のケースでpreload が動作しない 7.4.3で修正? • opcache.preload_userの設定があっ ても一般ユーザでの起動時にsegfault ->
7.4.3で修正?
• https://bugs.php.net/search.php?cmd=displa y&package_name[]=opcache • redditのPHP系板 -> つい最近も7.4.3で Laravelが動いたなどの感動のお便りが報告さ れた 情報キャッチアップ
開発時の注意
• 内部の実行パスが少し変わるので、開 発(preload無)、本番(preload有)みた いな使い分けは危険 • 最低でも、phpunitはpreload有で実行 する • 出来れば、ファイル更新でphp-fpm再 起動とかが良さそう
phpunitで使うには これを設定しないと、コマンドライン実行時に opcacheが動かない。 preload専用の検証環境を用意してE2Eテストをし たとしても、エッジケースで動かない可能性もある ので、C1を通しでpreload設定で動かすようにしな いと怖い。
まとめ
• preloadはautoloadを削減 • ソースレベルでの実行パスが preload有無で若干変わる • 本番投入は、まだ待ったほうが...