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
Profiling PHP @ PHPCon Poland 2016
Search
Sebastian Grodzicki
October 01, 2016
Technology
1
690
Profiling PHP @ PHPCon Poland 2016
PHPCon Poland 2016
http://www.phpcon.pl/2016/pl/
Sebastian Grodzicki
October 01, 2016
Tweet
Share
More Decks by Sebastian Grodzicki
See All by Sebastian Grodzicki
Fault-tolerant workflow orchestration in PHP @ PHPCon Poland 2024
sgrodzicki
0
71
PHP w Google Cloud @ PHPCon Poland 2022
sgrodzicki
0
12
Elasticsearch + Symfony @ SymfonyLive Online Polish Edition 2021
sgrodzicki
0
140
Elasticsearch + Symfony @ WDI 2021
sgrodzicki
0
44
Combining Logs, Metrics, and Traces for Unified Observability @ Infoshare 2020
sgrodzicki
0
460
Building Distributed Systems in Distributed Teams @ Infoshare 2020
sgrodzicki
0
53
Building Distributed Systems in Distributed Teams @ 4Developers 2020
sgrodzicki
0
57
Building Distributed Systems in Distributed Teams @ DevOpsDay Warsaw 2019
sgrodzicki
0
41
Infrastructure as Code @ DevOpsDay Warsaw 2019
sgrodzicki
0
53
Other Decks in Technology
See All in Technology
20250514_未経験から Fintech実務参画まで。学生エンジニアの挑戦録
hideto1008
0
880
從開發到架構設計的可觀測性實踐
philipz
0
190
現場で役立つAPIデザイン
nagix
1
190
libsyncrpcってなに?
uhyo
0
250
FASTと向き合うことで見えた、大規模アジャイルの難しさと楽しさ
wooootack
0
280
単一Gitリポジトリから独立しました
lycorptech_jp
PRO
0
370
Nonaka Sensei
kawaguti
PRO
2
350
AIとSREの未来 / AI and SRE
ymotongpoo
2
1.8k
GitHub Copilot Use Cases at ZOZO
horie1024
1
350
うちの会社の評判は?SNSの投稿分析にAIを使ってみた
doumae
0
620
おれのAI活用の現状とこれから
tsukasagr
0
120
データ戦略部門 紹介資料
sansan33
PRO
1
3.2k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
7
640
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
870
Code Review Best Practice
trishagee
68
18k
What's in a price? How to price your products and services
michaelherold
245
12k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Docker and Python
trallard
44
3.4k
Transcript
PROFILING PHP SEBASTIAN GRODZICKI
WHO USES PHP?
WHO USES PHP 7?
WHO USES PHPUNIT?
WHO USES XDEBUG?
WHO USES BLACKFIRE?
SEBASTIAN GRODZICKI CTO @ SHOWROOM
I’M NOT HIRED BY BLACKFIRE. Sebastian Grodzicki DISCLAIMER
40% OF USERS ABANDON A WEBSITE THAT TAKES MORE THAN
3 SECONDS TO LOAD Akamai STATISTICS
PROFILING IS A WAY TO MEASURE WHERE A PROGRAM SPENDS
TIME MathWorks DEFINITION
MICROTIME
log_format foobar '$remote_addr ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"
' '$request_time $upstream_response_time’; access_log /var/log/nginx/access.log foobar; NGINX
Xdebug
xdebug.profiler_enable_trigger = 1 http://url?XDEBUG_PROFILE=1
KCACHEGRIND
PROFILING PHP WEBGRIND
XHProf
<?php xhprof_enable(); # do some stuff $xhprof_data = xhprof_disable();
XHPROF
None
None
PROFILING PHP TIME Wall time I/O CPU Disk I/O Network
= = + +
PROFILING PHP INCLUSIVE VS EXCLUSIVE TIME function foo() { $str
= bar(); return $str; } function foo() { $str = bar(); return $str; }
BLACKFIRE CONTINUOUS PERFORMANCE TESTING
BLACKFIRE CALLGRAPHS
BLACKFIRE HOT PATHS
DEMO CHROME COMPANION
None
None
DEMO BLACKFIRE CURL
None
DEMO BLACKFIRE RUN
None
None
ASSERTIONS
PROFILING PHP ASSERTIONS tests: "Application should never hit the DB":
path: "/.*" assertions: - "metrics.sql.queries.count == 0"
PROFILING PHP ASSERTIONS tests: "Homepage should never call the API":
path: "/" assertions: - "metrics.http.requests.count == 0"
PROFILING PHP ASSERTIONS tests: "Pages should be fast enough": path:
"/.*" assertions: - "main.wall_time < 100ms"
None
BUILDS
None
None
None
PHP SDK
BLACKFIRE PHP SDK ▸ composer require blackfire/php-sdk ▸ $blackfire =
new \Blackfire\Client(); ▸ $probe = $blackfire->createProbe(); ▸ $profile = $blackfire->endProbe($probe);
PHPUNIT
<?php use Blackfire\Bridge\PhpUnit\TestCaseTrait; use Blackfire\Profile; class IntegrationTest extends
\PHPUnit_Framework_TestCase { use TestCaseTrait; /** * @requires extension blackfire */ public function testSomething() { $config = new Profile\Configuration(); $config ->assert('metrics.sql.queries.count < 5', 'SQL queries') ->assert('metrics.twig.render.count < 3', 'Rendered Twig templates') ->assert('metrics.twig.compile.count == 0', 'Twig compilation') ; } }
blackfire.io/docs/24-days
QUESTIONS?
THANK YOU!