Jump to content

Wasze ustawienia PHP i MySQL, konfiguracja serwerów VPS pod Prestę


hakeryk2

Recommended Posts

Nurtuje mnie takie pytanko jak macie ustawione parametry, limity, custom configi na waszych VPS pod Prestę i przy jakim sprzęcie? W szególności może MySQL ponieważ nigdy nie mogę sprawić by działała mega szybko i na localhoście localhost działa szybciej niż na produkcji. Ogólnie nie jest źle. Około 300-400 ms na TTFB z cache presty, mod_pagespeed i jpresta cache oraz opcache ale zawsze można by wyciągnąć więcej :) PHP 5.6 póki co ale niedługo przesiadka na 7.2 po zakończeniu testów na localhoście.

U mnie jest 3x 2.4 Ghz, 4 Gb RAM, 80GB SSD

-------------------------------------------------------------------

MYSQL

max_connections = 200

sort_buffer_size = 2097152 

join_buffer_size = 24M
innodb_buffer_pool_size = 2G 

innodb_log_file_size = 512M
table_open_cache = 5000
thread_cache_size = 24

innodb_page_cleaners = 8 

innodb_flush_method = O_DIRECT

# danger stability but provides more speed changed 2018-07-31, default 1, 0 is prob faster, check 2, HOLLY FUCK THIS 2 IS FAST!
innodb_flush_log_at_trx_commit = 2

innodb_flush_log_at_timeout = 0

innodb_log_compressed_pages = 0

innodb_lru_scan_depth = 256

innodb_read_io_threads = 12 #changed 2018-07-31, default 4, was 8
innodb_write_io_threads = 12

innodb_io_capacity = 800

innodb_io_capacity_max = 4000 

key_buffer_size = 128M

innodb_thread_concurrency = 0

------------------------------------------------------------------


i mam coś takiego w PHP-FPM:

Zmieniłem z ondemand na statyczne
;pm = ondemand default changed in 2018-08-03 to static to see performance
pm = static
pm.max_children = 20

pm.start_servers = 9

pm.max_spare_servers = 16

pm.max_requests = 300


; Custom values
php_admin_value[max_execution_time] = 1800
php_admin_value[max_input_vars] = 20000
php_admin_value[max_input_time] = 55000
php_admin_value[memory_limit] = 320M
php_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT
php_flag[display_errors] = off
php_admin_value[post_max_size] = 192M
php_admin_value[upload_max_filesize] = 32M
php_admin_flag[allow_url_fopen] = on
php_admin_value[disable_functions] = exec,passthru,popen,proc_open,show_source,shell,shell_exec,symlink,system,mail

-----------------------------------

Serwer bezproblemowo radzi sobie jeszcze z mod_pagespeed i CoreFilters, odczytanie strony to około 300 -500 ms i ruchem na poziomie średnio 10-20 osób online, jednak bez problemu działał nawet przy 150 osobach online.
 

 

 

Edited by hakeryk2 (see edit history)
  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...
Dnia 21.02.2019 o 10:45 AM, hakeryk2 napisał:

U mnie jest 3x 2.4 Ghz, 4 Gb RAM, 80GB SSD

Bida Panie Bida, my śmigamy na takich maszynkach: "IBM Power 8 S822LC system with 2x10 cores @2.92GHz running in SMT8 mode (160 threads), 256GB of RAM to have the full DB in memory" :P

https://www.softizy.com/blog/prestashop-1-6-1-0-performances/

Znalazłem taki artykuł, zostawiam może się komuś przyda.

Edited by Piotr Kaczor (see edit history)
Link to comment
Share on other sites

Panie, nie sposób się nie chwalić taką potężną maszyną, ale sztuką jest z gówna ferrari wyciągnąć :) Jedno już wiem, że czynnikiem limitującym moją wydajność w mySQL jest I/O na dysku hostingu który nie wydala w tej kwestii i może kiedyś przerzucę się na hetznera lub linuxVps.

W porównaniu do tego linku który wrzuciłeś to osiągam znacznie lepsze wyniki na większym sklepie (więcej produktów, kombinacji, reguł koszyka) i na słabszym sprzęcie :) Ponadto korzystanie z query_cache_size = 32M to jakieś nieporozumienie ponieważ po zapchaniu cache (a dzieje się to relatywnie szybko) każde odpytanie najpierw sprawdza czy jest w cache, jak nie, to zwalnia miejsce z cache i usuwa i tam wstawia znacznie spowalniając cały proces. Lepiej ogólnie zakomentować.

Z takim moich uwag do tamtej konfiguracji lepiej byłoby korzystać zamiast:
innodb_thread_concurrency  = 32 na = 0

Ponadto jest tam podane:

innodb_buffer_pool_size = 3G

i później widzę, że jest 

innodb_log_file_size = 128M

a wartość innodb_log_file_size powinna wynosić 1/4 z innodb_buffer_pool_size czyli powinno być 768M
-------------------------------------
Sprawdzę wartości u siebie innodb_flush_neighbors = 0 bo mam 1

Link to comment
Share on other sites

Patrzyłem na VPS OVH, można wybrać Debiana z zainstalowaną najnowszą Prestą na Apache z php 5.6 w konfigu tylko to jest "nie standardowe" poza execution_time i wielkościami plików

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority

 

Edited by Piotr Kaczor (see edit history)
Link to comment
Share on other sites

ja skorzystałem z tych dwóch linków ale najwięcej dało opcashe z drugiego i po jego właczeniu sklep dostał kopa przestał rzeźbić procesorem i kilkukrotnie wzrosła predkość, w konfigu php opcashe był standardowo wyłaczony. w mysql za duzo nie grzebałem- chyba tylko limity pamięci bo ogólnie pracuje na EC2 AWS więc sie nei użeram z dedykami z hostingów.

https://devdocs.prestashop.com/1.7/scale/optimizations/

 

https://lastplaceonthe.net/how-to-enable-php-7-opcache-on-ubuntu-16-04/

 

 

Link to comment
Share on other sites

@turbo_rabbit W sumie o tym nie wspomniałem ale opcache oczywiście załączony i skonfigurowany wg takiego configa - zwróćcie uwagę na memory_consumption i to ile macie dostępnego ramu by udostępnić opcache)
 

[opcache]
opcache.enable = 1
opcache.revalidate_freq=1800
opcache.validate_timestamps=0 
opcache.max_accelerated_files=16000
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1


Proszę też pamiętać przynajmniej w 1.6 by dodać komendę opcache_reset(); w Module.php w funkcji _clearCache na samym początku funkcji. Wtedy mamy pewność, że gdy nastąpi revalidate to php dostanie świeże pliki a nie jakiś miszmasz.

Edited by hakeryk2 (see edit history)
Link to comment
Share on other sites

Świetny wątek, dziękuję autorowi za poruszenie tematu. Wielokrotnie błądziłem po sieci w poszukiwaniu optymalnego configa dla PS, ale wygląda na to, że nie istnieje jako taki sprofilowany stricte pod nasz kochany e-commercowy framework.

W załączeniu mój zrzut variables z sqla - prawdopodobnie pełen absurdów.

Jest to efekt moich poszukiwań i zlepek różnych koncepcji optymalizacji MySQL

@hakeryk2 co o nim sądzisz?

Maszyna to 4x Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz / 8 GB RAM / SSD 250GB - mam tutaj zahostowane 4 sklepy PS. 

z czego średnie obciążenie jak poniżej:

image.png.7d9dda6c1d2342e38d1e0f46f313a40d.png

 

 

 

mycnf.txt

  • Like 1
Link to comment
Share on other sites

Szczerze statyczne dane z ptop średnio pomagają :) Warto podzielić się własnymi ustawieniami w my.cnf w etc/mysql lub porównać niektóre wartości z SHOW Variables; z konsoli mysql z tym co sam wrzuciłem u góry. Przydatnym narzędziem jest również mysqltuner który warto zainstalować, zostawić na tydzień i odpalić ponownie - otrzymasz wiele wskazówek które można poprawić, ale nie należy ich brać też za pewnik. Niektóre są absurdalnie przesadzone i tylko własne testy będą skutkować zwiększeniem wydajności.

Polecam też zainstalować sobie narzędzie htop na VPS ponieważ w znacznie bardziej przejrzysty sposób prezentuje procesy :)

Z własnego doświadczenia powiem też tyle, że nawet najlepsza optymalizacja mySQL nie pomoże jeśli będziemy mieli źle zoptymalizowane zapytania lub zapytania bez indeksów (te zapytania wyłapuje mysltuner) oraz gdy dyski na których są ulokowane bazy danych będą przeciążone i będzie kolejka dostępowa do odczytu i zapisu.

EDIT:
Dopiero zauważyłem, że dołączyłeś mycnf :) Tak więc porównaj swoje wartości do moich bo VPS są podobne, poczekaj na wyniki mysql tunera i zobacz co tam można jeszcze pozmieniać.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...