Gość Rafiki Zgłoś post Napisano Listopad 18, 2014 Posiadam VPS:6 x 2,4 Ghz (intel Xenon - debian 7 64 bit)8GB ramudysk SSDna tym VPS stoi tylko nginx + php-fpmna osobnym vps ( 2x3Ghz + 3GB ram - centos 6 64bity) stoi tylko baza danych MariaDB.Myślałem ,że taka konfiguracja będzie super wydajna i była gdy na serwerze hostowałem małe stronki nie przekraczające kilkudziesięciu użytkowników w ciągu dnia.Od niedawna przeniosłem na moje "maszyny" sklep oparty na prestashop, który ma dziennie ok. 1 500 unikalnych wejść i już zaczął się problem.Wieczorami gdy sklep ma największe obciązenie jest najgorzej, wtedy często pojawia się błąd 504 bad gateaway.Sklep ma swój pool w php-fpm ale niestety gdy online jest już kilkanaście osób VPS nie wytrzymuje, sklep ładuje się "godzinami" o ile się załaduje albo wywala w/w błąd. Procesor obciążony jest często w 100% (wszystkich 6 rdzeni). Nie wiem czym może to być spowodowane.A może poprostu taka konfiguracja jest za słaba na preste i online 20 osób ? (a co dopiero jak przyjdą święta i osob online będzie 30 - 40 wole nie myśleć )Poniżej konfiguracja nginx oraz vhosta do sklepu oraz php-fpmProsiłbym o rady co powinienem zmienic albo chociaż gdzie szukać aby rozwiązać ten problem.Z góry wielkie dzięki.PS. Najdziwniejsze było ty gdy chwili przełączyłem sklep na apache2-worker + php-fpm "zatykał" się mniej niż nginx z phpem i generował mniejsze zużycie CPU. Ale i tak wyżej opisywane sytuacje miały miejsce tylko jakby z mniejszym nasileniem.nginx.conf user www-data; worker_processes 6; pid /var/run/nginx.pid; events { worker_connections 1024; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 90; types_hash_max_size 2048; server_tokens off; client_max_body_size 10m; client_body_buffer_size 128k; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } vhost server { listen 80; #server_name bb.vpsfi.pl www.bb.vpsfi.pl; server_name bba.vpsfi.pl www.bba.vpsfi.pl brooklynbutik.pl www.brooklynbutik.pl bb.vpsfi.pl www.bb.vpsfi.pl; root /home/brooklynbutik/public_html/; location / { index index.php index.html index.htm; } # Shop rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last; rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last; rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ //img/c/$1$2$3.jpg last; rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last; rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last; rewrite ^/order$ /index.php?controller=order last; rewrite ^/allegro/(.*)$ http://brookly1.o11.pl/allegro/allegro/$1 last; rewrite ^/adm/&token(.*)$ /adm/index.php?controller=AdminDashboard&token$1 last; rewrite ^/adm/index.php$ /adm/index.php?controller=AdminDashboard&token last; if (!-e $request_filename) { rewrite ^/.*$ /index.php last; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm-brooklynbutik.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /home/brooklynbutik/public_html$fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 14k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } access_log off; log_not_found off; error_log /var/log/nginx-error.log warn; # static file cache configuration location ~* .(gif)$ { expires 2592000s; } location ~* .(jpeg|jpg)$ { expires 2592000s; } location ~* .(png)$ { expires 2592000s; } location ~* .(css)$ { expires 604800s; } location ~* .(js)$ { expires 604800s; } location ~* .(js)$ { expires 604800s; } location ~* .(ico)$ { expires 31536000s; } } php-fpm [brooklynbutik] user = brooklynbutik group = brooklynbutik listen = /var/run/php5-fpm-brooklynbutik.sock listen.backlog = -1 listen.owner = www-data listen.group = www-data ;listen.mode = 0660 ;listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 100 pm.start_servers = 6 pm.min_spare_servers = 6 pm.max_spare_servers = 12 ;pm.process_idle_timeout = 10s; pm.max_requests = 500 rlimit_files = 131072 rlimit_core = unlimited catch_workers_output = yes chdir = / php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f postmaster@vpsfi.pl php_flag[display_errors] = on php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 256M Udostępnij ten post Link to postu Udostępnij na innych stronach
malu 460 Zgłoś post Napisano Listopad 18, 2014 Przede wszystkim presta często bywa tragiczna i pewnie warto byłoby bardzo dokładnie przeanalizować co w niej powoduje problemy.Ale tak poza tym testowałeś jak się sprawuje ten zewnętrzny MySQL? Czy przypadkiem provider nie ucina Ci przepustowości pomiędzy serwerami, albo w ogóle jak wyglądają opóźnienia w komunikacji? Udostępnij ten post Link to postu Udostępnij na innych stronach
spindritf 240 Zgłoś post Napisano Listopad 18, 2014 (edytowany) Po pierwsze, wywal te rewrite'y i popraw sprawdzanie, czy plik istnieje w konfigu nginksa. Metodą Kopiego-Paste'a chyba to pisałeś, co? Wygląda tragicznie. Po drugie, musisz ustalić, co generuje obciążenie: nginx, php, baza danych? Na pewno problem jest z CPU? Nie przypadkiem z I/O? Albo w ogóle z konfiguracją? Nie kończą się deskryptory albo coś takiego? Pokaż błędy z logów nginksa i php. Edytowano Listopad 18, 2014 przez spindritf (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Listopad 18, 2014 Pewnie open files limit masz domyslny 1024. Daj wieksza wartosc, naprawde wieksza. Potem php sprobuj na tcp zamiast socket'a, bo jak VPS to roznir bywa. Czasami zewnetrzna baza nie przyspiesza, ale to sprawdz na koncu. Jakby dalej mulilo to odezwij sie na PW, zerkne i moze cos pomoge. Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Rafiki Zgłoś post Napisano Grudzień 2, 2014 Dziękuje wszystkim za rady. Niestety dopiero teraz mam możliwośc odpisać. Przetestowałem wszystkie opisane tutaj możliwości i jeszcze więcej znalezionych w Internecie - niestety żadnych zmian nie dały, przynajmniej podszkoliłem się trochę w linuxie Co do rewritów były one wzięte z strony nginx'a na temat presty jak ją odpalić i wątpie czy jak w przypadku Wordpressa wystarczy jedna linijka ale jeśli się mylę z chęcia poznam lepsze rozwiązanie. Co do szybkości ładowania sklepu i jego zamulania problem nie stał wcale po stronie serwera Serwer miał zbyt duże obciązenia gdy wchodziło na sklep juz kilkanaście osób (nie mówiąc o 100 - 200 online gdzie teraz taka liczba nie robi wrażenia na VPS'ie ). Problem stał po stronie presty która miała ustawione cacheowanie do memcached (który oczywiście był zainstalowany i uruchomiony na serwerze) - niestety jakis "bufor" się zapychał po kilku wejściach i na tym się kończyło. Wyłączenie tej opcji w prestashop spowodowało normalne działanie tzn takie ,że przy odwiedzalności 10tys wejść sklep działa szybciutko Udostępnij ten post Link to postu Udostępnij na innych stronach