SlideShare a Scribd company logo
1 of 47
Download to read offline
Optymalizacyjna
magia
czyli jak wyciągać króliki z kapelusza
O czym jest ta prezentacja?
Teoria
Optymalizacja
Wikipedia
metoda wyznaczania najlepszego (optymalnego)
rozwiązania z punktu widzenia określonego kryterium
(wskaźnika) jakości (np. kosztu, drogi, wydajności)
Teoria
Optymalizacja
Wikipedia
W programowaniu komputerowym optymalizacja
oprogramowania oznacza działania mające na celu
poprawę programu komputerowego, tak by czas jego
działania oraz używane zasoby komputerowe takie jak
pamięć, użycie procesora, ilość przesyłanych danych
potrzebnych do jego uruchomienia i działania były jak
najmniejsze.
Teoria
Co można optymalizować?
• użycie procesora
• użycie RAM
• sieć
• dysk
Teoria
Kiedy optymalizacja jest
skuteczna?
• gdy obniżyliśmy zużycie zasobów
Teoria
Kiedy optymalizacja jest
skuteczna?
• gdy obniżyliśmy zużycie zasobów
• jak nic się nie zepsuło
Teoria
Jak sprawdzić skuteczność?
• monitoring
Teoria
Jak sprawdzić skuteczność?
• monitoring
• monitoring
Teoria
Jak sprawdzić skuteczność?
• monitoring
• monitoring
• monitoring
Teoria
Skąd wiedzieć że to już?
proaktywnie
• testy automatyczne / CI
• planowane testy wydajnościowe
Teoria
Skąd wiedzieć że to już?
proaktywnie
• testy automatyczne / CI
• planowane testy wydajnościowe
reaktywnie
• monitoring
• ops / product owner
• użytkownicy
• zarząd
Elementy do optymalizacji
Teoria
Infrastruktura
• więcej maszyn
• mocniejsze maszyny
• większa przepustowość sieci
• lepsze dyski (SSD, NVMe)
• klastry baz danych
• ilość hopów sieciowych
Teoria
Konfiguracja
• fpm
• php.ini
• inne usługi (nginx, mysql, redis)
Teoria
Kod
• wywołania funkcji/metod
• zapytania do zewnętrznych serwisów
• zapytania do baz danych
• dane pobierane z cache
Praktyka
Praktyka
Praktyka
bazowy kod
czas 5.07s
RAM 32.5MB
network 8.02MB
Praktyka
bazowy kod (dodatkowe 10 req w tle)
czas 15.6s (+208%)
RAM 32.5MB
network 8.02MB
Praktyka
properties z redis (dodatkowe 10 req w tle)
czas 2.13s (-86%)
RAM 21.7MB (-33%)
network 2.76MB (-66%)
Praktyka
properties z redis mget (dodatkowe 10 req w tle)
czas 166ms (-92%)
RAM 21.6MB (-0.7%)
network 1.51MB (-45%)
Praktyka
mniej nowych obiektów (dodatkowe 10 req w tle)
czas 170ms (+1.8%)
RAM 21.6MB
network 1.51MB
Praktyka
dane z apcu (dodatkowe 10 req w tle)
czas 134ms (-21%)
RAM 25MB (+15.8%)
network 0.89kB (-100%)
Praktyka
Praktyka
nowy filtr (dodatkowe 10 req w tle)
czas 311ms (+120%)
RAM 25MB
network 0.89kB
Praktyka
nowy filtr (dodatkowe 10 req w tle)
czas 124ms (-60%)
RAM 25MB
network 0.89kB
Czy to wszystko?
Praktyka
Serializacja
apc.serializer = php
Praktyka
Serializacja
apc.serializer = php
apc.serializer = igbinary
Praktyka
APCu igbinary (dodatkowe 10 req w tle)
czas 103ms (-17%)
RAM 13.7MB (-45%)
network 0.89kB
Praktyka
pm
pm = static
pm.max_children = 500
Praktyka
dodatkowe 1000 req w tle
czas 344ms (+234%)
RAM 13.7MB
network 0.89kB
Podsumowując
podsumowanie (dodatkowe 10 req w tle)
czas 15.6s -> 103ms (-99%)
RAM 32.5 -> 13.7MB (-58%)
network
8.02MB -> 0.89kB
(-100%)
Pytania?
Dziękuję
szymon.sadlo@grupablix.pl
Szymon Sadło
DevOps Engineer

More Related Content

What's hot

[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkHighWheelSoftware
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...PROIDEA
 
Wjug from java to big data
Wjug   from java to big dataWjug   from java to big data
Wjug from java to big dataPiotr Guzik
 
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Maciek Próchniak
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Łukasz Zakrzewski
 
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Timur Kamanin
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Adrian Kalbarczyk
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwLuke Adamczewski
 
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyJakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyBusiness Link Krakow
 

What's hot (20)

[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFramework
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...
Kamil Wysocki - Jak zrobić bramkę zdolną przyjąć miliony danych i nie strzeli...
 
Wjug from java to big data
Wjug   from java to big dataWjug   from java to big data
Wjug from java to big data
 
GlusterFS
GlusterFSGlusterFS
GlusterFS
 
Azure Site Recovery
Azure Site RecoveryAzure Site Recovery
Azure Site Recovery
 
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010
 
Tuning zabbix
Tuning zabbixTuning zabbix
Tuning zabbix
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?
 
JRuby real use case
JRuby real use caseJRuby real use case
JRuby real use case
 
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case StudyJakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
 

Similar to Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza

IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
 
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...PROIDEA
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Divante
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQLExpert.pl
 
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfLogi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfTameshi Team
 
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PROIDEA
 
MS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMarcin Samsonowski
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsWojciech Grześkowiak
 
Jesień Linuksowa 2013, Smack
Jesień Linuksowa 2013, SmackJesień Linuksowa 2013, Smack
Jesień Linuksowa 2013, SmackRafal Krypa
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far Wojciech Barczyński
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
MCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMarcin Daczkowski
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Laravel Poland MeetUp
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Tieto Corporation
 
Empathy optymalizacja postgre_sql
Empathy optymalizacja postgre_sqlEmpathy optymalizacja postgre_sql
Empathy optymalizacja postgre_sqlSpodek 2.0
 
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami PROIDEA
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 

Similar to Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza (20)

[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
 
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracji
 
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfLogi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
 
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
 
MS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowych
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel Extensions
 
Jesień Linuksowa 2013, Smack
Jesień Linuksowa 2013, SmackJesień Linuksowa 2013, Smack
Jesień Linuksowa 2013, Smack
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
MCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - Diagnostics
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)
 
Empathy optymalizacja postgre_sql
Empathy optymalizacja postgre_sqlEmpathy optymalizacja postgre_sql
Empathy optymalizacja postgre_sql
 
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami
PLNOG 8: Maciej Kubat - Nowe możliwości w zarządzaniu sieciami
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 

Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza