私は 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 に関連するメモリ リークも文書化されているため、影響を受けるかどうかを確認する必要がある場合があります。