• No results found

Per e f r o f r o m r a m n a c n e e & Scal ca ab a i b lity t Andy Thornton

N/A
N/A
Protected

Academic year: 2021

Share "Per e f r o f r o m r a m n a c n e e & Scal ca ab a i b lity t Andy Thornton"

Copied!
27
0
0

Loading.... (view fulltext now)

Full text

(1)

Performance & Scalability

Performance & Scalability

(2)

This is my apology for making my slideshow very text heavy ....

An opening Apology

However, I added some fun pictures, to hopefully compensate ...

(3)

Who's this presentation for?

Who's this presentation for?

(4)

Agenda

Capacity Planning and Architecture

Testing Tools

Pressflow & Varnish

Pressflow & Varnish

Where are the pinch points?

PHP

Caching

MySQL

Apache

Drupal

Tweaks

Handy Tools

Handy Tools

Further Reading

Questions?

(5)

Determine Metrics

»

Test Plan

»

Analyse Results

»

Rinse and repeat

Capacity

Planning

However Beautiful the strategy, you should occasionally look at the results

(6)

Testing

Tools

The Grinder

A java based load testing tool.

http://grinder.sourceforge.net/

JMeter

Java based tool, designed to load test

XHProf

Profiler for PHP providing some valuable metrics and reporting.

http://mirror.facebook.net/facebook/xhprof/doc.html Java based tool, designed to load test

functional behavior and measure performance.

http://jakarta.apache.org/jmeter/

Openload

http://www.opendemand.com/openload/

Soasta

Leveraging resources from the cloud, Soasta is fast becoming a leader in performance testing. (Acquia Partner)

http://www.soasta.com/ http://www.soasta.com/

RRD Tool

OpenSource high performance data logging and graphing system for time series data.

(7)

Acquia

&

Soasta

(8)

Drupal Distribution Optimised for performance and scale

• Support for database replication

• Support for Squid or Varnish as reverse proxy caches • Optimised for MySQL

• Optimised for MySQL • Optimised for PHP • Supported by Acquia

Varnish

Varnish stores web pages in

memory so the web servers don't have to create the same web page have to create the same web page over and over again. The web

server only recreates a page when it is changed.

Reporting from Varnish can provide some good data to help with capacity planning.

(9)

Investigating Issues

Memory Tapped Out?

Apache is generally the culprit, fine tune your config and possibly add more memory.

CPU is maxing out? CPU is maxing out?

PHP is your prime suspect as it's CPU intensive, look into using an Opcode cache.

Hard Drives are getting Thrashed!

(10)

Pain

points?

Apache

PHP

MySQL

(11)

PHP parses and compiles all code into an intermediary series of opcodes, or more accurately an intermediary series of opcodes for each request.

Accelerators (Opcode Caching)

Alternative PHP Cache (APC) • eAccelerator

• XCache

• Nusphere PhpExpress • Zend Accelerator

Application Profiling

Some applications work well on small scale sites, but get bogged down when moved

Application Processes

Creating new processes is a slow operation. CGI applications that fork a new process on every invocation will run substantially slower the more processes are running.

Running PHP in multi-threaded mode can improve response times, but consider disabling unused services, for example:

• telnetd, inetd, atd, ftpd, lpd, sambad sites, but get bogged down when moved

into production. • Zend Studio • Komodo • Eclipse (PDT) • Xdebug • Aptanta Studio

• telnetd, inetd, atd, ftpd, lpd, sambad • sendmail

• portmap

(12)

Sometimes, a cache setup can slow things down!

When Drupal Attacks!

Tip 1: If APC is compiled with mmap support, you can use /dev/zero (usually the default)

/dev/zero

apc.mmap_file_mask = /dev/zero

Andy will explain why /dev/zero is handy...

Tip 2:

Make sure to give it enough memory.

Tip 2:

Make sure to give it enough memory.

(13)

Andy's Page of Weird Apache Commands

Display currently loaded modules

apachectl -t -D DUMP_MODULES

Good candidates to remove, mod_cgi, mod_dav, mod_ldap*

How do I see if that made a difference?

How do I see if that made a difference?

ab -n 100 -c 5 http://www.domain.com/test.html

Is the swap file being used?

vmstat 1 60

Runs vmstat every 1 second 60 times

Decreasing Apache Timeouts

Normally the default is set to 5 minutes (300 seconds), how about reducing it to 20 seconds?

TimeOut 20

(14)

Maxclients Setting in Apache

Whats a good way to find the maxclients number?

MaxClients (Ram - size of all other processes) / (size of the apache process)

We are making an educated guess based on dividing the system memory (our physical RAM) by We are making an educated guess based on dividing the system memory (our physical RAM) by the maximum size of an apache process, with enough wiggle room to have the operating system run smoothly.

To find the size of a running process;

ps -ylC apache2 --sort:rss

Divide the size by 1024 to get the process size in meg. You can also use pmap, use top to find the pid, then use;

pmap -x <pid id> pmap -x <pid id>

Another handy way of seeing how your memory is doing.

free -m

and good old VMSTAT to see if your memory is being paged

(15)

Huge List of Apache Tips

mod_expires Allows Drupal to send out http expires headers caching all files in the users browsers (~2 weeks) or until a new page is made available.

Reduce DNS Lookups

You can tell Apache to not perform a DNS lookup on files by their mime type.

made available.

This is good for all static files / images / css / javascript.

Drupal is pre-configured to use mod_exp if it's available. Configure it's use in your .htaccess

# Cache files for 2 weeks after access ExpiresActive On ExpiresDefault A1209600 HostnameLookups Off <Files ~"\.(html/cgi)$"> HostnameLookup On </Files> File Negotiation

Be specific when specifying filenames rather than wildcards (when possible).

Instead of:

# Don't Cache Dynamic pages ExpiresByType text/html A1

You don't let Apache cache HTML content as Drupal's content isn't static. This is why Drupal uses it's own cache.

Instead of:

DirectoryIndex index

Use:

(16)

More Apache Tips ...

mod_deflate this allows your web server to compress files before being sending them to the users browser

AddOutputFilterByType Deflate text/html text/css

htaccess If you have access to your

VirtualHosts in Apache, move your directives out of htaccess and move them in to the VirtualHost for your website.

AddOutputFilterByType Deflate text/html text/css

More advanced example:

SetOutputFilter DEFLATE

# Netscape 4.x has some problems...

BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip

VirtualHost for your website.

The reason for this is that Apache loads your virtual host once when started but Drupal searches for htaccess files in multiple directories at runtime.

Disable htaccess lookups with:

<Directory />

AllowOveride None </Directory>

# MSIE masquerades as Netscape, but it is fine

# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images

SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png)$ no-gzip dont-vary

(17)

Webserver

Worker Alternatives to Apache

Apache supports pluggable concurrency modules, called Multi Processing Modules. So which is a good fit for my website?

Worker

Uses multiple child processes with many threads each. Each thread handles one connection at a time.

Prefork

Uses multiple child processes each with one connection at a time. On many systems it's comparable to worker (in speed) but it uses more memory. Generally,

recommended for Drupal due to it's threading model.

Alternatives to Apache Nginx (engine-X)

Faster than Apache and has more predictable memory usage. Not as straight forward to setup (rewrite rules for example).

LIGHTHTTPD

Good performance. Although there has been discussion on the drupal forums as to its ability to cleanly run Drupal 7. Not for the feint of

heart. heart.

Microsoft Web Matrix

Runs Drupal under IIS with PHP, good for Microsoft shops.

(18)

Drupal does a lot of work in the database, especially for authenticated users and modules, so how can we get the best out of our database?

Enable Query Cache Logging Slow Queries

Database Optimisations

Enable Query Cache

This feature is generally disabled by default. To enable it, assign a value to query_cache_size in your mysql configuration file.

[mysqld]

query_cache_size = 64M

You can query the setting as it's a variable.

SHOW VARIABLES LIKE 'have_query_cache';

Logging Slow Queries

You can instruct MySQL to log all queries that take too long to run, for later analysis.

[mysqld]

log_slow_queries=/var/log/slow-queries.log log_query_time=5

Leaving off the query time will default it to 10 seconds.

Analysing Slow Queries

You may have to do some testing to find the best value to use.

Analysing Slow Queries

Prepend your query with EXPLAIN and run it for more information, or analyse your query with MAATKIT.

EXPLAIN will show which indices are being used, sometime just indexing the table can be a good fix.

(19)

Table locking can be a good indicator of problems in your database.

MyISAM and InnoDb Good Candidates for InnoDB

More Database Tips

MyISAM and InnoDb

Performance wise, they both stand up well, but whats the difference for Drupal?

Table Locking

MyISAM = Table Level Locking InnoDB = Row level Locking

How do I know if I need to make a change?

Take a look at

Good Candidates for InnoDB

Which tables would benefit from changing to use row level locking.

• Cache tables • Watchdog • Sessions • Accesslog

Tips

mysqlreport can be automated to show any wait times for transactions.

SHOW STATUS LIKE 'Table%'; Table_locks_immediate 1151552 Table_locks_waited 15324

How do I change a table type?

ALTER TABLE accesslog TYPE='InnoDB';

times for transactions.

Keep your cron short to prune tables regularly if tables get too big.

You can use the Devel module to identify Query expensive pages in Drupal.

(20)

Drupal 6

Caching in Drupal can be enabled through the Performance module in Admin and settings.php.

Drupal Ships with 6 Cache tables

• cache

• cache_block

Drupal Performance Module Options

• cache_block • cache_page • cache_filter • cache_menu • cache_form Developer Tip

When writing your own modules and need to cache data, think about using your own tables. It reduces write contention with Drupal for using the cache tables and doesn't bloat the table with your data.

Normal: Drupal bootstraps in phases, when

normal is selected it uses just enough phases to load a page from cache. Keeping db queries to a minimum.

Aggressive: Completely bypasses loading of all modules. Boot and Exit hooks are never called for cached pages. This means less PHP is

parsed since no modules are loaded. There's are also fewer database calls.

Most functions also have a $reset parameter which instructs the function to clear down it's internal cache.

Consolidate Javascript & CSS

Enabling these options "smushes" javascript and stylesheets into single files and minifies them.

Fastpath: Not enabled from the admin panel, this option is enabled from settings.php. The idea is that a call to the file system is faster as there's no ramping up for a database query. This may not scale across load balanced hosting..

(21)

Drupal 6

Drupal doesn't store session information for the first anonymous visitor. This is so webcrawlers and spiders don't fill your session tables up. However, these tables can get very large.

Garbage Collection

Default value for garbage collection is a little over 2

Pruning Sessions

Drupal controls when session start by turning off Default value for garbage collection is a little over 2 days, you can also increase the frequency of collection with

session.gc_maxlifetime (seconds) session.cache_expire (minutes)

Note: When you adjust maxlifetime, adjust cache_expire to be the same.

Tip:As Drupal can serve cached pages to anonymous users and anonymous users don't normally use

Drupal controls when session start by turning off PHP's session autostart functionality in htaccess.

php_value session.auto_start 0

The session table is cleared out when PHP's garbage collection runs. The lifetime of a session record is determined by

session.gc.maxlifetime (seconds)

Other settings you can experiment with: users and anonymous users don't normally use

interactive features of Drupal. How about reducing the time they are logged in or log them out when they close their browser.

# 86400 seconds = 24 hours session.cookie_lifetime, 86400 # Logout on browser close session.cookie_lifetime, 0

Other settings you can experiment with:

session.cache_expire session.cache_limiter session.cookie_lifetime session.save_handler session.use_only_cookies session.use_trans_sid

(22)

Not a great deal has changed with Drupal 7, there's been a lot of code optimisation and some

Whats Changed in Drupal 7

Not a great deal has changed with Drupal 7, there's been a lot of code optimisation and some elements of Pressflow have made their way into the Drupal 7 codebase.

However, the following changes are notable.

Removed

• Caching Mode Option on the performance page • Throttling Block throttling.

New Features

• New Performance Logging

• Improved performance on uncached pages

• When logged in, performs fewer queries on path alias lookups • Tighter Integration with APC

(23)

Google CSE

Google's custom search service with some impressive features, including branding support and on-the-fly indexing support. Well documented API, but requires some work to get setup initially.

http://www.google.com/cse/

Alternatives to Search

http://www.google.com/cse/

Acquia Search

Built upon Lucene and Solr from Apache, hosted service with easy integration with Drupal. All administration tasks are built in to the admin panel. A very powerful alternative to Drupal's built in search.

http://acquia.com/products-services/acquia-search

Apache Solr

Java based open source enterprise search platform from the Apache Lucene project.

(24)

Theme Optimisation

Use of sprite maps / minified code / Optimised Images / Google JSAPI / Browser Caching Expiring Content / Reduce HTTP requests / Non Blocking Javascript

More

Tweaks

Throttling and Block Caching

Enabling throttling allows you to turn off modules & blocks when the system starts to get sluggish. You can set the threshold in the admin panel, and determine which modules and blocks to turn off from their respective admin pages.

Modules

Cacherouter / Boost / Devel / Authcache

Content Delivery Networks

The capacity sum of strategically placed servers can result in an The capacity sum of strategically placed servers can result in an impressive boost in the number of concurrent users.

• Akamai Technologies • Amazon CloudFront • BitGravity • CacheFly • CD Networks • Windows Azure

(25)

Web Load Testing & Page Audit

http://www.webpagetest.org/

Open Source Testing Tools

YSlow (Firebug)

http://developer.yahoo.com/yslow/

Performance Articles (Google Code)

Handy

Tools

Open Source Testing Tools

http://www.opensourcetesting.org/performance.php JMeter http://jakarta.apache.org/jmeter/ Apache Bench http://httpd.apache.org/docs/2.0/programs/ab.html mysqlreport http://hackmysql.com/mysqlreport

Performance Articles (Google Code)

http://code.google.com/speed/articles/

Devel Module (Drupal)

http://drupal.com/project/devel Ubuntu, Landscape http://www.canonical.com/enterprise-services/landscape SOASTA CloudTest http://acquia.com/SOASTA/next-steps http://acquia.com/SOASTA/next-steps

Client (browser based tools)

Boomerang / Firebug / Chrome Dev Tools /

MAATKIT

(26)

The Art Of Capacity Planning

Web-based companies live or die by the ability to scale their infrastructure to accommodate increasing demand. This book is a hands-on and practical guide to planning for such growth.

O'Reilley Media : Amazon

Further

Reading

High Performance MySQL

High Performance MySQL is the definitive guide to building fast, reliable systems with MySQL. This book covers every aspect of MySQL performance in detail and focuses on robustness, security and data integrity.

O'Reilley Media : Amazon

Even Faster Websites

Steve Sounders works on the performance team at Google and has written a couple of great books on performance.

(27)

Questions?

[email protected]

References

Related documents

The aim of this in vitro study was to evaluate the biomechanical performance of a newly proposed crossed-screw concept (&#34;Fence&#34;) utilizing conventional (non-locked) implants

Hewett TE, Myer GD, Ford KR, Heidt RS Jr, Colosimo AJ, McLean SG, van den Bogert AJ, Paterno MV, Succop P: Biomechanical measures of neuromuscular control and valgus loading of the

ited access to English language-based communication, infre- quent contact with clinicians familiar with their language and culture, and the challenging experience of working with

Wilcoxon signed rank tests were used for the comparison of areal BMD, volumetric BMD and BMC of the affected and non-affected femoral neck and areal BMD and BMC of the affected

This is the first systematic review and meta-analysis examining the effectiveness of interventions in improv- ing subjective and/or objective levels of PA in adults with PMP

HYDRAULIC FRACTURING IN MICHIGAN INTEGRATED ASSESSMENT: OVERVIEW + GLOSSARY, SEPTEMBER 2013 Steering Committee.. The following steering committee has been assembled to guide

However, Hispanic patients with knee and back pain appear to differ from non-Hispanic Whites in areas pertinent to shared decision-making, including the role of adverse experiences

The less intense symptoms associated with NSTEMI or UA may lead some patients to wait during daytime and on weekdays, which could help explain the increased pro- portion with STEMI