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
200
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.6k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.4k
Other Decks in Programming
See All in Programming
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
250
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
160
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.7k
Catch Up: Go Style Guide Update
andpad
0
230
Leading Effective Engineering Teams in the AI Era
addyosmani
6
450
作って理解するGOCACHEPROG / Go Conference 2025(Workshop)
mazrean
0
100
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
110
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
230
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
理論と実務のギャップを超える
eycjur
0
140
CSC509 Lecture 04
javiergs
PRO
0
300
Le côté obscur des IA génératives
pascallemerrer
0
150
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Side Projects
sachag
455
43k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
What's in a price? How to price your products and services
michaelherold
246
12k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
20
1.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Leading Effective Engineering Teams in the AI Era
addyosmani
6
450
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
35
6.1k
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有無で若干変わる • 本番投入は、まだ待ったほうが...