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
250
OPCache preloadの話 / opcache_preload
OPCache preloadの解説
Ryo Tomidokoro
February 26, 2020
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
3.3k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
4
1.3k
PHPで学ぶ Session の基本と応用 / web-app-session-101-2024
hanhan1978
12
4.7k
レガシー回避のPHP開発術/avoid_php_legacy
hanhan1978
14
11k
Laravel Collectionの計算量を調べてみた2023/laravel_collection_time_complexity_2023
hanhan1978
0
860
PHP で学ぶ Cache の距離の話 / study_cache_with_php
hanhan1978
7
1.8k
Laravel を低速化する技術 / how to slow laravel
hanhan1978
1
3.1k
俺の Laravel がこんなに速いわけがない! / My Laravel Too Fast
hanhan1978
0
1.6k
Other Decks in Programming
See All in Programming
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
340
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
260
Ruby GitHub Packages
bkuhlmann
0
630
2 週間で Twitter Bot を作ってみた
contour_gara
0
590
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
830
Rethinking UI building strategies @ SFI 2024
letelete
0
270
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
710
PHPはいつから死んでいるかの調査
chiroruxx
1
400
Milestoner
bkuhlmann
1
410
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
0
260
Featured
See All Featured
A Philosophy of Restraint
colly
197
16k
Building Applications with DynamoDB
mza
88
5.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
Building Adaptive Systems
keathley
31
1.9k
Scaling GitHub
holman
457
140k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
Making the Leap to Tech Lead
cromwellryan
124
8.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
43k
Building Flexible Design Systems
yeseniaperezcruz
319
37k
It's Worth the Effort
3n
180
27k
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有無で若干変わる • 本番投入は、まだ待ったほうが...