nginx プロキシを使用した nodejs、メモリ使用量

nginx プロキシを使用した nodejs、メモリ使用量

私は nginx プロキシを nodejs アプリ (express) に使用していますが、メモリ使用量が他の php アプリよりも大きいことがわかりました。私は nodejs の初心者なので、これらの設定と統計が正常かどうか、または何か問題があるかどうかを確認するのを手伝ってください。

# ps aux --sort -rss | head

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3587  0.1  9.3 1122596 191268 ?      Ssl  Oct10   0:47 node /var/www/html/domain1.com/app/app.js
mongod    2266  0.4  2.6 652476 53572 ?        Sl   Oct01  65:18 /usr/bin/mongod -f /etc/mongod.conf
root      2380  0.0  1.9 984316 39184 ?        Ssl  Oct01   8:18 PM2 v0.14.7: God Daemon
nginx   18011  6.2  0.9 253192 18576 ?        S    02:56   0:00 php-fpm: pool www
nginx   17492  3.0  0.9 252996 18452 ?        S    02:53   0:05 php-fpm: pool www
nginx   17269  3.1  0.9 252984 18428 ?        S    02:52   0:07 php-fpm: pool www
nginx   17261  3.1  0.9 252888 18380 ?        S    02:51   0:08 php-fpm: pool www
nginx   17201  3.3  0.8 252936 18148 ?        S    02:51   0:10 php-fpm: pool www
postgres  3596  0.0  0.5 326276 11844 ?        Ss   Oct10   0:01 postgres: db_admin db 127.0.0.1(54307) idle

# free -m

             total       used       free     shared    buffers     cached
Mem:          1991       1209        781          8        121        221
-/+ buffers/cache:        866       1124 
Swap:          511         48        463 

nginx の設定

server {
  listen 80;
  server_name domain1.com  www.domain1.com;
  access_log /var/log/nginx/domain1.com.access.log;
  location ~ ^/sitemap/(.*)$ {
    root /var/www/html/domain1.com/app/Sitemap/SitemapGz;
  }
  location /robots.txt {
    alias /var/www/html/domain1.com/app/robots.txt;
  }
  location ~ ^/(images/|javascripts/|stylesheets/|fonts) {
    root /var/www/html/domain1.com/app/assets;
    access_log off;
    expires max;
  }
  location / {
    set $fixed_destination $http_destination;
    if ( $http_destination ~* ^https(.*)$ )
    {
    set $fixed_destination http$1;
    }
    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;
  }
}

nginx の設定

user              nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log;

pid        /var/run/nginx.pid;


events {
    worker_connections  2048;
}


http {
  # fastcgi cache ...


  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;

  reset_timedout_connection on;
  send_timeout 2;

  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;
}

答え1

Node.js は、基盤で JavaScript V8 エンジンを使用しており、エンジンはガベージ コレクションに高度なアルゴリズムを使用しているため、十分な空きメモリがあることがわかると、それを利用しようとします。つまり、メモリ使用量が多いことが必ずしも問題を示しているわけではありません。node.js は使用可能なメモリの 85 ~ 90% を使用する可能性がありますが、非常に高速に実行され、何も問題はありません。メモリ使用量が多いことは正常である可能性もありますが、問題である可能性もありますが、それを判断する方法はありません。アプリがクラッシュしたり、非常に遅く実行されたりしない限り、心配する必要はありませんが、ベースラインを確立するために注意を払う必要があります。

ちなみに、アプリの監視に New Relic を使用する場合、メモリ使用量が 2 ~ 4 倍に膨れ上がる傾向がありますが、これは動作方法であり、問​​題はありません。ただし、SSL に関連するメモリ リークも文書化されているため、影響を受けるかどうかを確認する必要がある場合があります。

関連情報