php application performance

87
PHP Meetup Melbourne, Australia April 2014 Harald Zeitlhofer @HZeitlhofer PHP Applica=on Performance

Upload: harald-zeitlhofer

Post on 17-Jul-2015

93 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 1

PHP#Meetup#Melbourne,#Australia#

April#2014#

Harald#Zeitlhofer#

@HZeitlhofer#

PHP#Applica=on#Performance#

Page 2: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 2

• Technology#Strategist#at#Dynatrace#• Database#and#Web#Development#

• PHP#for#more#than#15#years#

• Love#to#discover#new#things#

Harald#Zeitlhofer#

Page 3: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 3

I’m#from#Austria#

Page 4: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 4

Page 5: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 5

But#you#probably#know#that...#

Page 6: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 6

And#for#sure#you##know#that##

Page 7: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 7

Also#from#Austria#

Page 8: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 8

You#might#have#heard#of...#

Page 9: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 9

Applica=on#Performance#

Page 10: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 10

Failures happen!!

Nobody likes it when …

Page 11: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 11

Unless you work for Google or Microsoft !

Page 12: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 12

… or this …

Page 13: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 13

Page 14: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 14

.. as it leads to this …

Page 15: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 15

The#“War#Room”#

#Facebook#–#December#2012#

Page 16: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 16

… and potentially to this …

Page 17: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 17

Page 18: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 18

And this isn’t helping either …

Page 19: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 19

Page 20: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 20

Yes, failures happen!!

but we can identify and/or avoid them !

Page 21: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 21

but#where#should#we#start?#

Page 22: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 22

and#when#???#?

Page 23: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 23

Page 24: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 24

Page 25: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 25

some%use%cases%and%best%prac/ces%

Page 26: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 26

Page 27: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 27

Not#following#Web#Performance#Best#Prac=ces# 282!$Objects#on#that#page#9.68MB#Page#Size#

8.8s$Page#Load#Time#

Most#objects#are#images#

delivered#from#the##

main#domain#

Very#long#connect#=me#

(1.8s)#to#the#CDN#

Page 28: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 28

Mobile#Web#Site:#This#SHOULD#NOT#happen!#

434$Resources$in#total#on#that#page:#230#JPEGs,#75#PNGs,#50#GIFs,#…#

Total#size#of#~#20MB$

Page 29: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 29

cached#content#

s=ll#creates#roundtrips#!#

Page 30: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 30

use%proper%caching%%

pack%JS,%CSS%files%%

use%sprites%for%images%%

Page 31: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 31

Page 32: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 32

frustrated#users#

slow#user#ac=on#

response#=me#

Page 33: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 33

errors#in#PHP#execu=on#

Page 34: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 34

less#library#caused#

performance##

hotspot#

Page 35: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 35

know%your%code%%

know%your%%external%libraries%

%

Page 36: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 36

Page 37: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 37

Page 38: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 38

/katgrp/browse#

Page 39: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 39

/katgrp/get/$/1626#

Page 40: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 40

/cave/browse/gis/$/katgrp/1626#

Page 41: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 41

/cave/browse/gis/$/katgrp/1626#–#applica=on#context#

Page 42: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 42

Sessions#in#PHP#

•  session_start()#locks#the#file#where#session#data#are#stored#•  Released#when#script#ends#• Use#session_write_close()#to#unlock#the#file#before#execu=ng#slower#code#• Or#create#your#own##save#handler#with##

session_set_save_handler()#

Page 43: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 43

Looks#bener#now…#

Page 44: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 44

Page 45: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 45

performance#hotspot#

/en/externalprice/#

Page 46: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 46

response#=me##

hotspot#PHP#

Page 47: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 47

session#data#locking#

response#=me#hotspot:#

usleep();%

Page 48: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 48

be%careful%with%locking%%

Page 49: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 49

Page 50: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 50

Locking#problem#solved,#but#…#

Page 51: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 51

/katgrp/browse#server#side#execu=on#

=me#to#check##

the#database#

Page 52: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 52

From#the#DB#perspec=ve#

Page 53: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 53

Here#we#go:#

Page 54: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 54

N+1#Queries#

Metrics:####SQL#Execu=ons#/#Request#

##of#“same”#SQL#Execu=ons#

Page 55: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 55

mind%the%database%!!!%%

Page 56: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 56

anything#else#we#can#do?#

what#about##

3rd#party#content?#

Page 57: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 57

3rd#party#content#

Page 58: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 58

3rd#party#content#

Page 59: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 59

watch%external%services%%

be%aware%there%are%services%you%%can't%control%

%

Page 60: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 60

to#summarize#that#

Page 61: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 61

PHP#Applica=on#Performance#

Page 62: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 62

PHP#OpCache#

Page 63: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 63

PHP#OpCache#disabled#

Page 64: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 64

PHP#OpCache#enabled#

Page 65: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 65

huge#number#of#

sta=c#resources#

Page 66: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 66

Web#Request#handling#

Page 67: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 67

Page 68: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 68

Web#Request#handling#

Page 69: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 69

Transac=on#flow#

Page 70: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 70

Nginx#FastCGI#cache#

Page 71: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 71

Nginx#FastCGI#cache#

Page 72: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 72

Full#page#/#data#cache#with#Nginx#and#Memcached#

<?php ... function __construct () { $this->c = new Memcached(); $this->c->addServer('localhost',11211);

} function setCache ($key, $content) { $this->c->set($key, $content);

} ... $this->setCache($_SERVER['REQUEST_URI'], $this->renderPage()); ... $this->setCache('/data/news/getlist', $this->getNewsList()); ... ?>

Page 73: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 73

• ngx_hnp_memcached_module#

Full#page#/#data#cache#with#Nginx#and#Memcached#

server { location / { set $memcached_key "$uri"; memcached_pass localhost:11211; error_page 404 502 504 = @fallback; } location @fallback { proxy_pass http://backend; } }

Page 74: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 74

PHP,#5k#requests,#concurrency#100#

0#

1#

2#

3#

4#

5#

6#

7#

8#

Apache+PHP# Nginx+PHP# Nginx+Memcached#

<?php echo "Hello World"; ?>

Page 75: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 75

use%right%server%tools%%

configure%properly%%

Page 76: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 76

But still, failures happen!!

make sure to identify

them as soon as possible

Page 77: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 77

EndtTotEnd#Applica=on#Monitoring#

Page 78: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 78

monitor%all%transac/ons%in%all%channels%

Page 79: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 79

User#Experience#Management#

locate%regional%performance%issues%

Page 80: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 80

monitor%your%infrastructure%

Page 81: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 81

process%monitoring%

Page 82: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 82

iden/fy%response%/me%hotspots%in%the%backend%

Page 83: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 83 drill%down%to%find%the%root%cause%

Page 84: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 84

Applica=on#Performance#

Page 85: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 85

Performance#Tools#

Page 86: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 86

• Load#Generator#(Apache#Benchmark,#JMeter)#

• Firebug,#Google#Developer#Tools#Dynatrace#Ajax#Edi=on#

• Google#PageSpeed#• Dynatrace#Free#Trial#

•  Free#trial#license#for#30#days#

•  Free#for#developers#on#local#machine#

My#favorites#

hnp://bit.ly/dnrial#

Page 87: PHP application performance

COMPANY CONFIDENTIAL – DO NOT DISTRIBUTE 87

www.dynatrace.com#

Thank#you#!!!#

Harald%Zeitlhofer%Senior#Technology#Strategist#

#HZeitlhofer#

[email protected]#

hnp://blog.dyntrace.com#