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
Understanding XHProf: Pinpointing Why Your Site...
Search
Ezra Gildesgame
April 19, 2014
Programming
0
200
Understanding XHProf: Pinpointing Why Your Site is Slow and How to Fix It
Ezra Gildesgame
April 19, 2014
Tweet
Share
Other Decks in Programming
See All in Programming
The free-lunch guide to idea circularity
hollycummins
0
390
ロボットのための工場に灯りは要らない
watany
12
3.2k
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
120
ファインチューニングせずメインコンペを解く方法
pokutuna
0
220
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
3.3k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
240
Codex の「自走力」を高める
yorifuji
0
1.3k
Tamach-sre-3_ANDPAD-shimaison93
mane12yurks38
0
200
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
Rethinking API Platform Filters
vinceamstoutz
0
4k
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
100
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
590
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
500
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
160
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
390
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Docker and Python
trallard
47
3.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
93
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
440
Transcript
Understanding XHProf Pinpointing Why Your Site is Slow and How
to Fix It Ezra Gildesgame - Acquia @ezrabg Stanford Drupal Camp 2014
The Problem: Slow Websites/Web apps • Unhappy users leave •
Severs can’t sustain load
Every second counts • http://blog.kissmetrics.com/loading-time/
XHProf provides information about execution time • Time spent by
the server to generate page sent to the web browser (or API endpoint) • Also measures memory & CPU usage
XHProf does not measure: • Time to First Byte (TTFB)
• Page render time (happens in the browser) • Other aspects of front-end performance • For page render time, see Chrome Dev tools, YSlow
Our goal: Reduce page execution time • Improve user experience
• Improve concurrency and efficient use of server resources.
Avoid speculation: • “Maybe it’s x” • Wasted time on
fruitless investigation • Wasted time on inappropriate remediations • Vague problem descriptions, “Eg, Views is slow”
Misconceptions
Misconceptions
Be smart, m’kay? • Tools like Views & Panels empower
you to do inefficient things but aren’t necessarily bad for performance • Views render & query, Panels pane caches are great tools to improve performance
Example problem statement • “Entity loads are slow because when
we load entities, we load field X which also loads Y data, which spends Z time in the database. Page A loads 1,000 entities of type X.”
Use XHProf to • Pinpoint the root cause of performance
problems • Develop a surgical remediation plan
Key UI Elements • # of function calls • Wall
time (Inclusive/exclusive) • Memory usage • CPU time
Exclusive/Inclusive • Exclusive: This function only • Inclusive: This function
and all child functions
CPU Time vs Wall Time • CPU Time: Time spent
by the CPU • Wall time: Time including disk I/O • CPU time != Wall time? Likely waiting for disk
We may find: • Function called many times unnecessarily •
Consider a static cache
We may find: • Slow queries • Execute page again
with Devel query log, use built-in explain feature
We may find: • Many fast queries that stack up
We may find
We may find • Queries that are quick to execute
but slow to assemble
We may find: • Excessive entity loads • Excessive calls
to memcache set/get
What is “excessive” • It depends! Know your app. •
Maybe you need that data on that request: Make it less expensive to compute • Maybe you don’t need that data: Don’t compute it
We may find: • Page-blocking calls (eg, 3rd-party API requests)
• Queue these
We may find: • Excessive calls to watchdog() • Notices
can slow down your site. • Fix those notices!
We may find: • Views/Panels render time - Dig deeper!
We may find:
Getting started • Brew install xhprof • Install: http://drupal.org/project/xhprof •
Alternative: https://github.com/ msonnabaum/xhprof-single-file
Avoid dirty runs. • Eliminate menu rebuilds • Disable Devel
query log • Disable XDebug - Really. • Test as a non-admin (access control is expensive. We want to observe that.)
Know which caches are in place • Views caches (Disable
Views caches: https:// gist.github.com/msonnabaum/9671947) • Panels Caches • Other caches
Other caches
“ZOMG! The site is slow!” • ORLY • Develop a
plan to measure and set goals
“Slow” Define success with specific performance goals • Execution time
on specific page logged in as specific user under specific conditions • Quantify improvements on a per-page basis
Example template
Case examples
Example 1
Example: Static Caching in CTools https://drupal.org/node/2049087 • Eliminated ~128,000 calls
to t() • Reduced memory footprint • Reduced page execution time by 2 seconds • Simple fix
Example: Static caching of node access grants https://drupal.org/comment/8495029 • node_access_grants()
never changes within a request • Why compute it multiple times within a request?
Example: Avoid unnecessary entity loads https://drupal.org/node/2169099
Optimize node access query building https://drupal.org/comment/8516319
Questions?