2015-09-09 1 views
0
nginx 
2 site use php 
1 site use nodejs with nginx proxy 
linode ( 
1 GB RAM 1 CPU Core 24 GB SSD Storage 
2 TB Transfer 
40 Gbit Network In 
125 Mbit Network Out 
) with centos 6.5 

J'ai du mal à obtenir 502 mauvaise passerelle au hasard, uniquement sur le site nodejs, les autres bien.gérer le processus et l'utilisation de la mémoire nginx + nodejs + php

donc je pensais que peut-être parce que mon utilisation de la mémoire ou une limite matérielle, donc je vérifier mon utilisation d'utilisation de la mémoire ci-dessous commande, je question
1. pourquoi tant de php-fpm fonctionnement
2. la mémoire libre seulement 8? C'est pourquoi je tombe en panne mon projet nodejs tout le temps?

# free -m

   total  used  free  shared buffers  cached 
Mem:   987  978   8   3   0   11 
-/+ buffers/cache:  967   20 
Swap:   255  255   0 

# top -b -n 1 -a

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                   
28337 root  20 0 833m 51m 2972 S 0.0 5.2 0:01.93 node /var/www/n                 
27914 apache 20 0 278m 36m 3460 S 0.0 3.7 0:29.15 php-fpm                   
27963 apache 20 0 278m 36m 3440 S 0.0 3.7 0:28.50 php-fpm                   
27992 apache 20 0 273m 36m 3156 S 0.0 3.7 0:27.14 php-fpm                   
27920 apache 20 0 279m 35m 3440 S 0.0 3.6 0:28.94 php-fpm                   
27958 apache 20 0 277m 33m 3408 S 9.8 3.4 0:29.20 php-fpm                   
27898 apache 20 0 278m 33m 3204 S 0.0 3.4 0:30.88 php-fpm                   
27976 apache 20 0 274m 32m 3392 S 0.0 3.3 0:26.00 php-fpm                   
28043 apache 20 0 265m 32m 3392 S 0.0 3.2 0:20.91 php-fpm                   
28000 apache 20 0 272m 32m 3440 S 0.0 3.2 0:24.74 php-fpm                   
28035 apache 20 0 265m 31m 3156 S 0.0 3.2 0:20.20 php-fpm                   
27980 apache 20 0 273m 31m 3156 S 0.0 3.2 0:26.64 php-fpm                   
28038 apache 20 0 264m 31m 3460 S 0.0 3.2 0:19.93 php-fpm                   
28021 apache 20 0 267m 30m 3156 S 0.0 3.1 0:19.82 php-fpm                   
28016 apache 20 0 266m 29m 3392 S 0.0 3.0 0:20.18 php-fpm                   
28024 apache 20 0 265m 29m 3440 S 0.0 3.0 0:19.73 php-fpm                   
25427 root  20 0 884m 29m 620 S 0.0 3.0 1:31.45 PM2 v0.14.7: Go                 
28054 apache 20 0 260m 27m 3344 S 0.0 2.8 0:17.47 php-fpm                   
28012 apache 20 0 264m 27m 3392 S 0.0 2.8 0:20.82 php-fpm                   
28058 apache 20 0 258m 26m 3460 S 13.7 2.7 0:16.46 php-fpm                   
28094 apache 20 0 258m 25m 3204 S 0.0 2.6 0:15.12 php-fpm                   
28241 apache 20 0 255m 24m 3440 S 0.0 2.5 0:13.54 php-fpm                   
28091 apache 20 0 255m 24m 3440 S 0.0 2.5 0:13.13 php-fpm                   
28254 apache 20 0 254m 24m 3204 S 0.0 2.5 0:12.11 php-fpm                   
2637 root  20 0 420m 23m 1712 S 0.0 2.4 12:03.18 fail2ban-server                 
28258 apache 20 0 252m 22m 3224 S 0.0 2.3 0:11.64 php-fpm                   
28268 apache 20 0 252m 22m 3204 S 0.0 2.3 0:10.10 php-fpm                   
28293 apache 20 0 249m 21m 3588 S 9.8 2.1 0:08.04 php-fpm                   
28274 apache 20 0 248m 19m 3204 S 0.0 2.0 0:09.04 php-fpm                   
28288 apache 20 0 248m 18m 3204 S 0.0 1.9 0:07.52 php-fpm                   
28312 apache 20 0 244m 17m 3628 S 0.0 1.7 0:04.71 php-fpm                   
28298 apache 20 0 245m 16m 3156 S 0.0 1.7 0:05.48 php-fpm                   
28319 apache 20 0 242m 14m 3388 S 0.0 1.4 0:03.05 php-fpm                   
28333 apache 20 0 241m 13m 3440 S 0.0 1.4 0:01.73 php-fpm                   
28344 apache 20 0 239m 12m 3828 S 0.0 1.2 0:00.47 php-fpm                   
28355 root  20 0 98696 5808 4896 S 0.0 0.6 0:00.00 sshd                    
28342 postgres 20 0 318m 3628 2120 S 0.0 0.4 0:00.02 postmaster                   
28356 sshd  20 0 67628 3140 2408 S 0.0 0.3 0:00.00 sshd                    
28368 root  20 0 15080 2000 1704 R 0.0 0.2 0:00.00 top                    
26870 nginx  20 0 97436 1848 644 S 2.0 0.2 1:04.77 nginx  

ps aux --sort -rss | tête

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
apache 28298 0.9 4.1 286860 41600 ?  S 04:46 0:32 php-fpm: pool www    
root  28649 3.9 4.0 712164 41360 ?  Ssl 05:43 0:01 node /var/www/html/nodejssite.com/app/app.js       
apache 28293 0.9 3.9 287736 40072 ?  S 04:44 0:33 php-fpm: pool www    
apache 28319 0.9 3.8 283160 38668 ?  S 04:51 0:28 php-fpm: pool www    
apache 28344 0.9 3.6 282864 36704 ?  S 04:56 0:27 php-fpm: pool www    
apache 28312 1.1 3.5 290280 36108 ?  S 04:49 0:36 php-fpm: pool www    
apache 28274 0.9 3.5 290128 35412 ?  S 04:39 0:35 php-fpm: pool www    
apache 28268 0.8 3.3 289060 34248 ?  S 04:37 0:33 php-fpm: pool www    
apache 28408 0.8 3.2 274004 33004 ?  S 05:03 0:21 php-fpm: pool www 

/etc/nginx/nginx.conf

user    nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log; 
#error_log /var/log/nginx/error.log notice; 
#error_log /var/log/nginx/error.log info; 

pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    gzip on; 

    gzip_comp_level 5; 
    gzip_min_length 256; 
    gzip_proxied  any; 
    gzip_vary   on; 

    gzip_types 
    application/atom+xml 
    application/javascript 
    application/json 
    application/ld+json 
    application/manifest+json 
    application/rdf+xml 
    application/rss+xml 
    application/schema+json 
    application/vnd.geo+json 
    application/vnd.ms-fontobject 
    application/x-font-ttf 
    application/x-javascript 
    application/x-web-app-manifest+json 
    application/xhtml+xml 
    application/xml 
    font/eot 
    font/opentype 
    image/bmp 
    image/svg+xml 
    image/vnd.microsoft.icon 
    image/x-icon 
    text/cache-manifest 
    text/css 
    text/javascript 
    text/plain 
    text/vcard 
    text/vnd.rim.location.xloc 
    text/vtt 
    text/x-component 
    text/x-cross-domain-policy 
    text/xml; 


    # Load config files from the /etc/nginx/conf.d directory 
    # The default server is in conf.d/default.conf 
    include /etc/nginx/conf.d/*.conf; 

} 

/etc/nginx/conf.d/default.conf

server { 
listen 80; 
server_name phpsite.com www.phpsite.com; 
access_log /var/log/nginx/phpsite.access.log; 
root /var/www/html/phpsite; 
index index.php index.html index.htm; 
try_files $uri $uri/ /index.php?$query_string; 
client_max_body_size 1G; 
location ~ \.php$ { 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
include /etc/nginx/fastcgi_params; 

fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_buffer_size 32k; 
fastcgi_buffers 8 32k; 
} 
} 

server { 
listen 80; 
server_name sub.phpsite.com www.sub.phpsite.com; 
access_log /var/log/nginx/sub.phpsite.access.log; 
root /var/www/html/sub; 
index index.php index.html index.htm; 
try_files $uri $uri/ /index.php?$query_string; 
client_max_body_size 1G; 
location ~ \.php$ { 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
include /etc/nginx/fastcgi_params; 

fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_buffer_size 32k; 
fastcgi_buffers 8 32k; 
} 
} 


server { 
listen 80; 
server_name nodejssite.com www.nodejssite.com; 
access_log /var/log/nginx/nodejssite.com.access.log; 
location ~ ^/sitemap/(.*)$ { 
root /var/www/html/nodejssite.com/app/Sitemap/SitemapGz; 
} 
location /robots.txt { 
alias /var/www/html/nodejssite.com/app/robots.txt; 
} 
location ~ ^/(images/|javascripts/|stylesheets/|fonts) { 
root /var/www/html/nodejssite.com/app/assets; 
access_log off; 
expires max; 
} 
location/{ 
proxy_pass http://127.00.0.1:8002/; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header Destination $fixed_destination; 

client_max_body_size 32M; 
client_body_buffer_size 512k; 
proxy_connect_timeout 300; 
proxy_send_timeout 300; 
proxy_read_timeout 300; 
proxy_buffer_size 4k; 
proxy_buffers 4 32k; 
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k; 
} 
} 
+0

Vous devez inclure votre configuration nginx. – Gijs

+1

@Gijs j'ajouté en question – user1775888

Répondre

0
  1. nombre de php-fpm traite les contrôles par son fichier de configuration, /etc/php5/fpm/pool.d/www.conf dans ubuntu.

    pm = dynamic 
    pm.max_children = 64 
    pm.start_servers = 8 
    pm.min_spare_servers = 8 
    pm.max_spare_servers = 32 
    pm.max_requests = 500   
    

Mon recomendation est de mettre cette valeur en fonction du nombre de visiteurs du site attendus. Par exemple:

pm.start_servers = 6 
pm.min_spare_servers = 6 
pm.max_spare_servers = 6 

s'il n'y a pas beaucoup d'utilisateurs sur le serveur, la meilleure stratégie pour php-FPM est pm = ondemand

vous pouvez en savoir plus sur ce there

PS> Pourriez-vous s'il vous plaît poster résultat de cette commande, pour essayer de vous aider en fonction de votre consommation actuelle de mémoire d'application: ps aux --sort -rss | head

+0

ajouter résultat en question, et ma config phpfpm 'h = dynamique pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500' chaque site php ou nodejs compte en moyenne 50 visiteurs en 1 heure, dois-je me tromper? – user1775888

+0

au début - votre problème est l'utilisation de la mémoire: vous pouvez le faire à partir de 'free -m' - votre mémoire et le swap sont pleins. dans syslog, vous pouvez voir, que le tueur OOM tue un certain processus. L'objectif principal est donc de réduire l'utilisation de la mémoire. à partir de 'ps aux --sort -rss | head' nous pouvons voir, ce noeud utilise 35m de mémoire et chaque php-fpm utilise 30m. Simplement, avec une mémoire de 1 Go, vous pouvez exécuter seulement 30 processus, alors que chacun nécessite une mémoire de 30 Mo. Lorsque vous définissez max_spare_chilrens - vous dites à php-fpm - il n'y a pas de problème, si 35 enfants vont s'exécuter sans requêtes. – BaZZiliO

+0

Mais c'est faux - nous avons un problème - vous devriez diminuer cette valeur - vous n'avez pas de mémoire pour cela. Vous dites, que vous 50 visiteurs par heure. 1 visiteur par minute Vous pouvez avoir 1 serveur de rechange pour gérer cela. Donc, mon suggestion est de mettre 'pm.max_spare_servers' à 5. – BaZZiliO