Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHP Performance tuning for Drupal 8

2,325 views

Published on

<p>Your Drupal 8 site is fantastic: you've spent hours/weeks/months working on it, the work is flawless and the customer is delighted - what are you going to need to fly this thing? Which PHP tips, tricks and tunings will help your site perform exceptionally at scale. </p>

<p>There are some significant differences in PHP/FPM performance tuning between Drupal 7 and Drupal 8, and this session will help you understand them. The old adage is true: the more things change, the more they stay the same - we'll revisit some of the 'tried and true' tips to keep your sites up and performant in the crush of traffic that occurs when your content goes viral. </p>

<p>Join us to learn about:</p>
<ul>
<li>Brief glance over Best Practices for Performance Tuning</li>
<li>PHP tuning including OPcache and APC User Cache</li>
<li>Varnish, Memcache, and Database tips</li>
<li>The Software Stack, with Drupal 8 integration tips.</li>
</ul>

Published in: Technology

PHP Performance tuning for Drupal 8

  1. 1. ©2016 Acquia Inc. — Confidential and Proprietary Erin Rasmussen, Support Engineer, Acquia PHP Performance Tuning for Drupal 8
  2. 2. ©2016 Acquia Inc. — Confidential and Proprietary Make that Drupal 8 site fly!! – Brief glance over Best Practices for Performance Tuning. – PHP tuning including Opcache, Interned strings and apcu – Varnish, Memcache, and Database tips – The Software Stack, with Drupal 8 integration tips.
  3. 3. ©2016 Acquia Inc. — Confidential and Proprietary Mitigate against Failure by planning for Success!! – Test, test and then Test again! (Include Load & Security Testing!) – Performance Review is Key: Understand the factors that Affect your Site’s Performance – Incorporate these strategies in your Continuous Improvement Process We want your project to succeed as much as you do!
  4. 4. ©2016 Acquia Inc. — Confidential and Proprietary This is an example stack, there are multiple ways configure them, your software may be different. Note: Development environments are almost always Different than Production environments. Know the Stack, Love the Stack Balancer / Varnish Memcached Apache PHP/FPM MySQL File System Code Repo
  5. 5. ©2016 Acquia Inc. — Confidential and Proprietary Multi-Tier, the Stack gets bigger With multi-tier, these the software stack can be split among server instances. With redundancy and failover. Balancer / Varnish Balancer / Varnish Memcached Apache PHP/FPM Apache PHP/FPM MySQL & File System MySQL & File System Code Repo Server AMI Type #Cores Date Time 1m 5m 15m bal-1*5*8 m3.2xlarge 8 2017-02-20 00:08:21 0.00 0.03 0.08 bal-1*5*9 m3.2xlarge 8 2017-02-20 00:08:22 0.33 0.29 0.25 web-18**7 c3.large 2 2017-02-20 00:08:21 0.02 0.03 0.05 web-18**8 c3.large 2 2017-02-20 00:08:21 0.00 0.01 0.05 fsdb-1**25 c3.large 2 2017-02-20 00:08:22 0.07 0.05 0.05 fsdb-1**26 c3.large 2 2017-02-20 00:08:23 0.03 0.04 0.05
  6. 6. ©2016 Acquia Inc. — Confidential and Proprietary Balancers / Caching a short intro Drupal 7, has URL-based page caching and empties the page cache for every edited piece of content! 2009-2011 Varnish wasn’t widely used, so Drupal 7 caches pages, but doesn’t invalidate them intelligently. Cache-Control = public, max-age=300 Works great – until there’s a DDOS or back-end server issue Cache-Control = public, max-age=31536000 Works great – until content updates aren’t reflected on the site.
  7. 7. ©2016 Acquia Inc. — Confidential and Proprietary Drupal 8 Caching is re-architected • Has a proper internal cache API, allows tagging of cache items. • Each single item is described with tags. Tags "bubble" up to all rendering parents. These tags are stored in the cache API. Cache::invalidateTags(["tag"]) CacheTagsListenersInterface The content API's call ::invalidateTags(). The render and page caches are transparently invalidated.
  8. 8. ©2016 Acquia Inc. — Confidential and Proprietary Varnish https://varnish-cache.org Support for Drupal 8 Cache Tags with Varnish Acquia Purge for Drupal 8 is a fully-featured API and you plug in a 'purger' to it, to support your CDN
  9. 9. ©2016 Acquia Inc. — Confidential and Proprietary PHP / FPM http://php.net https://php-fpm.org – Memory Limits – Max Execution Time – Zend OPcache – APC user cache – Memory Allocation Math
  10. 10. ©2016 Acquia Inc. — Confidential and Proprietary PHP Memory Limit http://php.net/manual/en/ini.core.php#ini.memory- limit The PHP memory_limit is the maximum number of M (in integers) that a single PHP/FPM proc can consume, by default memory_limit =128M Clear signs this is set too low: – php-errors.log: [20-Feb-2017 19:26:10 America/New_York] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 15990062 bytes) in docroot/includes/database/database.inc on line 2227 – PHP WSOD errors or “Temporarily Unavailable” errors.
  11. 11. ©2016 Acquia Inc. — Confidential and Proprietary Max Execution Time http://php.net/manual/en/features.connection-handling.php The amount of time a single PHP process can run (in seconds) max_execution_time – Resolve this problems by identifying slow processes and resolving the request or set_time_limit() function. Clear signs that your processes are taking too long –fpm-error.log max_children errors –White Screen of Death (Temporary Unavailable) errors.
  12. 12. ©2016 Acquia Inc. — Confidential and Proprietary OPcache (opcode cache) http://php.net/manual/en/intro.opcache.php Caches pre-compiled bytecode. Faster than using PHP of load & parse each script for each & every HTTP request. key variable: opcache.memory_consumption(128M) Needs to be large enough to store compiled code for your applications PHP scripts Clear sign that this is too small: – php-errors.log Warning: require_once() [function.require-once]: Unable to allocate memory for pool. OPcache Status monitor: https://github.com/rlerdorf/opcache-status
  13. 13. ©2016 Acquia Inc. — Confidential and Proprietary OPcache http://php.net/manual/en/book.opcache.php Interned Strings - the amount of memory (M) used to store identical strings (detected by PHP). By default this is a shared buffer allowing all Drupal PHP processes to reference it across multiple PHP/FPM procs - saving memory. Clear sign that this is set too low: – Fpm-error.log: Warning Interned string buffer overflow More indepth information: http://jpauli.github.io/2015/03/05/opcache.html
  14. 14. ©2016 Acquia Inc. — Confidential and Proprietary APC User Cache http://php.net/manual/en/intro.apcu.php APC User cache is PHP APC minus OPcache, rarely used in Drupal 7 (apc.shm_size= 8M is ok), increase for Drupal 8 (apc.shm_size=16 or 32M) Clear sign that the APC User cache is set too small: – In php-errors.log : [20-Feb-2017 13:54:16 America/New_York] PHP Warning: apcu_store(): Unable to allocate memory for pool. in /mnt/www/html/somenamedev/docroot/core/lib/Drupal/Core/Cache/ApcuBackend.php on line 177 Get usage Details!: use apc.php script in the docroot and view in your browser: note: the charts are less accurate than the text
  15. 15. ©2016 Acquia Inc. — Confidential and Proprietary APC User Cache Drupal 8.3 will reduce the amount stored in APC user cache in response to community issues: – Rationalize use of the 'discovery' cache bin, since it's stored in the limited size APCu by default https://www.drupal.org/node/2765271 – Change ViewsData to use the default cache bin instead of discovery https://www.drupal.org/node/2824547
  16. 16. ©2016 Acquia Inc. — Confidential and Proprietary PHP Procs and PHP Memory Math Total RAM 3860 OS 50 MySQL 1930 Memcache 64 Sites 4 Sitename Memory Limit Opcache APCu FPM d7sitedev 256 128 8 1 d7sitestg 256 128 8 1 d8sitedev 128 96 16 1 d8sitestg 128 96 16 1 Calculate the available memory for PHP (Total - OS - MySQL -Memcache ) Memory use by 1 Process: – Use top – memory_get_peak_usage() – Devel (Drupal 7 & 8) Calculate how many procs you can afford.
  17. 17. ©2016 Acquia Inc. — Confidential and Proprietary PHP/FPM max_children errors When there are more incoming requests than PHP/FPM can handle you get max_children errors. Clear sign that the site is exhausting PHP/FPM procs: – fpm-error.log srv-**35m notice [22-Feb-2017 16:32:38] WARNING: [pool someuser] server reached max_children setting (27), consider raising it. Causes are Varied – Large amount of HTTP traffic, PHP/FPM procs that are looping, or not terminating effectively. Or calls to External Services hanging/timing out
  18. 18. ©2016 Acquia Inc. — Confidential and Proprietary Adding the Impact of Traffic What happens when the new site launches – or it gets retweeted a million times:
  19. 19. ©2016 Acquia Inc. — Confidential and Proprietary What’s in that Traffic?
  20. 20. ©2016 Acquia Inc. — Confidential and Proprietary Memcached https://memcached.org Is a open source, high-performance, distributed memory object caching system Drupal 8 Memcache Module is Alpha https://www.drupal.org/project/memcache The Drupal 8 module will make GETS and SETS with properly configured Memcached, and supports key_prefixing. However, Memcached slabs are not encrypted by default Community Development is needed for a Stable Release of the Memcahed Drupal modue
  21. 21. ©2016 Acquia Inc. — Confidential and Proprietary Keep the Database Layer Happy – Enable Syslog, disable database Watchdog Logging. – Caching to the Database does not always Scale, keep an eye on your capacity and I/O errors. – Optimize queries, and keep an eye on database tables. Even the most efficient Views query will be slow on a 50 Gb table.
  22. 22. ©2016 Acquia Inc. — Confidential and Proprietary Keep the Front End Performant – Compress Site Images, PDFs and other Files before uploading them to the site. (Even a cached 7MB photo is a major performance hog when used 27 times on a site.) – Compress your CSS, and minify your JS. – Keep an eye on External calls. Use timeouts, and allow your application to fail gracefully when those resources cannot be reached.
  23. 23. ©2016 Acquia Inc. — Confidential and Proprietary Thank you!  Drupal ✩ Modern PHP: New Features and Good Practices by Josh Lockhart http://shop.oreilly.com/product/0636920033868.do ✩ Drupal 8 Cache API https://www.drupal.org/docs/8/api/cache-api/cache- api ✩ Acquia Purge https://www.drupal.org/project/acquia_purge ✩ Drupal’s PHP requirements https://www.drupal.org/docs/7/system- requirements/php

×