WordPress sur Nginx + php5-fpm + vernis + APC haute utilisation du processeur et de la mémoire

Après des jours de débogage et de réglages avec les parameters, je suis épuisé et incapable de trouver une solution. Bien guide

J’ai le serveur suivant sur DigitalOcean:

64GB Memory 8 Core processor 200GB SSD drive 

Et je gère un seul site WordPress. Le site est très fréquenté. (2000 à 3000 utilisateurs simultanés en temps réel) Et je suis sûr qu’en raison de mes mauvais réglages, je perds du trafic et que je ne peux pas servir de pages aux utilisateurs. Je m’attends à ce que les utilisateurs en temps réel soient plus de 5000+ mais il rest toujours autour de 2000.

Je reçois constamment des erreurs de MOO et à cause de quoi mysql ou php5-fpm est tué et le site tombe en panne. Si je modifie php-fpm et nginx je reçois 502 et 503 erreurs. Ou je reçois un upstream timed out (110: Connection timed out)' ou FastCGI sent in stderr: PHP message: PHP Fatal error: Maximum execution time of 30 seconds exceeded .

Maintenant, j’ai modifié les parameters pour que je ne reçoive aucune erreur, mais le trafic est tombé à environ 1500 utilisateurs simultanés et il refuse de monter. Donc, je suis sûr que quelque chose ne va pas dans mes parameters.

/etc/php5/fpm/pool.d/www.conf parameters:

 pm = dynamic pm.max_children = 150 pm.start_servers = 40 pm.min_spare_servers = 30 pm.max_spare_servers = 50 pm.max_requests = 1000 

Paramètres FastCGI: /etc/nginx/conf.d/default.conf

 location ~ \.php$ { try_files $uri =404; # proxy buffers - no 502 errors! proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; fastcgi_buffers 256 16k; fastcgi_buffer_size 128k; fastcgi_max_temp_file_size 0; fastcgi_intercept_errors on; fastcgi_keep_conn off; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; } 

/etc/php5/fpm/php.ini APC: /etc/php5/fpm/php.ini

 [apc] apc.write_lock = 1 apc.slam_defense = 0 apc.shm_size = "1024M" 

J’ai remarqué que les processus php5-fpm nécessitent beaucoup de mémoire. Par exemple, lorsque je calcule la mémoire moyenne par processus, j’obtiens: ps --no-headers -o "rss,cmd" -C php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' ps --no-headers -o "rss,cmd" -C php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' me donne 238M pour un trafic simultané de 1100.

S’il vous plaît guide-moi où ma configuration est incorrecte. Parce que je suis sûr à 100% que mon trafic est en train de s’étouffer.


information additionnelle

Nginx config: /etc/nginx/nginx.conf

 worker_processes 24; worker_rlimit_nofile 20000; events { worker_connections 40000; use epoll; multi_accept on; } 

Mais j’ai remarqué qu’ulimit sur le serveur est:

ulimit -n affiche 1024 seulement. Est-ce lié à mon problème?


Ajout de la VCL après la réponse de Daniel

 # This is a basic VCL configuration file for varnish. See the vcl(7) # man page for details on VCL syntax and semantics. # # Default backend definition. Set this to point to your content # server. # backend default { .host = "127.0.0.1"; .port = "8080"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; .max_connections = 800; } acl purge { "localhost"; } sub vcl_recv { set req.grace = 6h; # Set X-Forwarded-For header for logging in nginx remove req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; # Remove has_js and CloudFlare/Google Analytics __* cookies. set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", ""); # Remove a ";" prefix, if present. set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); # Either the admin pages or the login if (req.url ~ "/wp-(login|admin|cron)") { # Don't cache, pass to backend return (pass); } # Remove the wp-settings-1 cookie set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", ""); # Remove the wp-settings-time-1 cookie set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", ""); # Remove the wp test cookie set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", ""); # Static content unique to the theme can be cached (so no user uploaded images) # The reason I don't take the wp-content/uploads is because of cache size on bigger blogs # that would fill up with all those files getting pushed into cache if (req.url ~ "wp-content/themes/" && req.url ~ "\.(css|js|png|gif|jp(e)?g)") { unset req.http.cookie; } # Even if no cookies are present, I don't want my "uploads" to be cached due to their potential size if (req.url ~ "/wp-content/uploads/") { return (pass); } # Check the cookies for wordpress-specific items if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") { # A wordpress specific cookie has been set return (pass); } # allow PURGE from localhost if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } return (lookup); } # Force lookup if the request is a no-cache request from the client if (req.http.Cache-Control ~ "no-cache") { return (pass); } # Try a cache-lookup return (lookup); } sub vcl_fetch { #set obj.grace = 5m; set beresp.grace = 6h; } sub vcl_hit { if (req.request == "PURGE") { purge; error 200 "Purged."; } } sub vcl_miss { if (req.request == "PURGE") { purge; error 200 "Purged."; } } 

Avec ce trafic et cette configuration, vous manquez beaucoup d’opportunités (et de revenus) :). Vous devriez vraiment mettre la main sur le microcaching et le vernis Nginx!