@smitka Lynt services s.r.o.
Infrastruktura
Webová řešení
Marketing
WP – výkon a jeho profilování
Vláďa Smitkahttps://lynt.cz
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Co dnes uslyšíte?
• Kde a jak hledat výkonnostní problémy• Server vs zdroje• Pár slov o serverech a síťové infrastruktuře• Ladění DB• Ladění PHP skriptů pomocí Blackfire.io
• Budeme používat testovací virtuálek ve VirtualBoxu
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Virtuálek
Na flashce:• Virtualbox• Appliance (Centos-WPweekend.ova)• Datové a konfigurační soubory• Užitečné odkazy
• 1x předinstalovaný WP• Počítá s IP 192.168.33.10• Lze využít doménu *.10.lynt.eu• = wp1.10.lynt.eu
Apache 2.4
PHP 5.6 FPM127.0.0.1:9056
PHP 7.0 FPM127.0.0.1:9070
Port 80 Port 7080
MariaDB 5.5
MailCatcher
Shell in a Box
WP-CLI
WPscan
Datové soubory Konfigurace
DB Logy
Síť s hostemNAT
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Nastavení VBoxu
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
První kontakt
• https://gtmetrix.com/
• http://www.webpagetest.org/
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Waterfall
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Co na serveru trvá?
• Databázové dotazy• HTTP požadavky na vzdálené služby• Špatně napsaný kód, který se mnohokrát zbytečně spouští
• Maily
• Práce s daty na přetíženém serveru
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Hosting, VPS, vlastní server?
2x CPU, 4GB RAM
1x CPU, 2GB RAM
1x CPU, 2GB RAM
define( 'WP_MEMORY_LIMIT', '512M' ); Pro admin: WP_MAX_MEMORY_LIMIT
1 zobrazení běžné stránky = 20-40MB
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Jak si otestovat, kolik server snese?
• https://loader.io/
• https://loadimpact.com/
• https://www.blazemeter.com/
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Databázové dotazy
Q: Kolik?A: Query Monitor
Q: Jaké jsou dlouhodobě pomalé?A: Slowlog
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Ladění MySQL serveru
• http://mysqltuner.com/
• Query Cache, Buffery, DB Enginy
• Alternativa https://launchpad.net/mysql-tuning-primer
• Další nástroje (mysqlreport) https://github.com/daniel-nichter/hackmysql.com
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
mysqltuner.pl
slow-query-log = 1slow-query-log-file = /var/log/mysql/slow.loglong_query_time = 1log-queries-not-using-indexes
max_connections=50
query_cache_type = 1query_cache_size = 64Mquery_cache_limit = 2M
Při velké konkurenčnosti na multiprocesorovém systému však zdržuje!
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Transient API
$data = tohle_trva_fakt_dlouho();
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Transient API
$data = get_transient( 'unikatni_klic' );
if( WP_DEBUG || $data === false ) { $data = tohle_trva_fakt_dlouho(); set_transient( 'unikatni_klic', $data, DAY_IN_SECONDS );}
https://codex.wordpress.org/Transients_API
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
get_transient()wp-includes/options.php
function get_transient( $transient ) {... if ( wp_using_ext_object_cache() ) { $value = wp_cache_get( $transient, 'transient' ); } else { $transient_option = '_transient_' . $transient; if ( ! defined( 'WP_INSTALLING' ) ) { // If option is not in alloptions, it is not autoloaded and thus has a timeout $alloptions = wp_load_alloptions(); if ( !isset( $alloptions[$transient_option] ) ) { $transient_timeout = '_transient_timeout_' . $transient; if ( get_option( $transient_timeout ) < time() ) { delete_option( $transient_option ); delete_option( $transient_timeout ); $value = false; } } }
if ( ! isset( $value ) ) $value = get_option( $transient_option ); } ...}
Umí využívat Object-Cache
Xcache, APC, Redis, Memcached,…
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Profilování PHP
$start = microtime(true);
// jedeme!
$stop = microtime(true);error_log($stop - start);
/*memory_get_peak_usage();memory_get_usage();*/
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Blackfire.io
https://blackfire.io/
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
3 hlavní komponenty
• Probe – rozšíření pro PHP• Agent – posílač dat do služby + CLI• Companion – rozšíření do Chrome pro spouštění
testů
• https://blackfire.io/docs/up-and-running/installation
• Server ID + Token• Client ID + Token
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Blackfire.io – Premium na měsíc zdarma
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Dimenze
• Wall Time
• I/O Wait
• CPU Time
• Memory
• Network
• HTTP požadavky
• SQL dotazy
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Když se to moc opakuje
public function ziskat(){ $velka_instance_neceho = new Neco(); $vystup = $velka_instance_neceho->tezko_získat(); return $vystup; }
public function ziskat(){ static $vystup;
if (!isset($vystup)) { $velka_instance_neceho = new Neco(); $vystup = $velka_instance_neceho->tezko_ziskat(); } return $vystup; }
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Jak zprofilovat POST a jiné podivnosti?
Blackfire lze spouštět i z příkazové řádky:blackfire curl 'data'
blackfire --samples=10 run php -r 'echo "WPweekend!";blackfire upload CPU-20160526T202602.cpuprofile (výkon js v prohlížeči)blackfire upload homepage-xdebug.out (výstup z xdebug)
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Testy - .blackfire.yml
tests: "Homepage": path: "/" assertions:
- "metrics.sql.queries.count < 30"- "main.peak_memory < 30mb"- "metrics.http.requests.count < 5"
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Pochlubte se svým profilem na blogu ;-)
WP Oembed provider:
wp_oembed_add_provider('https://blackfire.io/profiles/*',
'https://blackfire.io/oembed' );
Infrastruktura
Webová řešení
Marketing
@smitka Lynt services s.r.o.
Děkuji za pozornost!
Dále si přečtěte:https://lynt.cz/blog/10-nejcastejsich-problemu-modernich-webu
https://lynt.cz/blog/optimalizace-vykonu-webovych-aplikaci-na-co-se-zamerit