[英]How to improve Nginx, Rails, Passenger memory usage?
我目前在通过Cloud 66的Digital Ocean VPS(1GB RAM)上安装了Rails应用程序。问题是VPS的内存在旅客流程中已满。
passenger-status
的输出:
# passenger-status
Version : 4.0.45
Date : 2014-09-23 09:04:37 +0000
Instance: 1762
----------- General information -----------
Max pool size : 2
Processes : 2
Requests in top-level queue : 0
----------- Application groups -----------
/var/deploy/cityspotters/web_head/current#default:
App root: /var/deploy/cityspotters/web_head/current
Requests in queue: 0
* PID: 7675 Sessions: 0 Processed: 599 Uptime: 39m 35s
CPU: 1% Memory : 151M Last used: 1m 10s ago
* PID: 7686 Sessions: 0 Processed: 477 Uptime: 39m 34s
CPU: 1% Memory : 115M Last used: 10s ago
max_pool_size似乎配置正确。
passenger-memory-stats
的输出:
# passenger-memory-stats
Version: 4.0.45
Date : 2014-09-23 09:10:41 +0000
------------- Apache processes -------------
*** WARNING: The Apache executable cannot be found.
Please set the APXS2 environment variable to your 'apxs2' executable's filename, or set the HTTPD environment variable to your 'httpd' or 'apache2' executable's filename.
--------- Nginx processes ---------
PID PPID VMSize Private Name
-----------------------------------
1762 1 51.8 MB 0.4 MB nginx: master process /opt/nginx/sbin/nginx
7616 1762 53.0 MB 1.8 MB nginx: worker process
### Processes: 2
### Total private dirty RSS: 2.22 MB
----- Passenger processes -----
PID VMSize Private Name
-------------------------------
7597 218.3 MB 0.3 MB PassengerWatchdog
7600 565.7 MB 1.1 MB PassengerHelperAgent
7606 230.8 MB 1.0 MB PassengerLoggingAgent
7675 652.0 MB 151.7 MB Passenger RackApp: /var/deploy/cityspotters/web_head/current
7686 652.1 MB 116.7 MB Passenger RackApp: /var/deploy/cityspotters/web_head/current
### Processes: 5
### Total private dirty RSS: 270.82 MB
.. 2乘客RackApp流程,确定。
但是当我使用htop
命令时,输出如下:
似乎有很多乘客行李架流程。 我们还使用默认配置运行Sidekiq。
新的Relic Server报告以下内存使用情况:
我尝试调整乘客设置,添加了负载平衡器和其他服务器,但老实说,不知道从这里开始该怎么做。 我如何找出导致大量内存使用的原因?
更新:由于某些更改,我不得不重新启动ngnix,它似乎释放了很多内存。
按Shift-H隐藏htop中的线程。 这些不是进程,而是进程中的线程。 关键列是RSS:您有209MB和215MB的两个乘客进程,以及154MB的一个Sidekiq进程。
简短的答案:这完全是Rails应用程序的正常内存使用情况。 如果您要每个1GB多个进程,则1GB只是小一点。 我将乘客减少到一个过程。
您的应用程序是否创建子进程? 如果是这样,那么这些额外的“ Passenger RackApp”进程实际上可能不是Phusion Passenger创建的进程,而是实际上是您自己的应用程序创建的进程。 您应该仔细检查您的应用是否产生子进程,以及是否正确清理了这些子进程。 还要仔细检查您是否使用了任何库,还正确清理了它们的子进程。
我看到您正在使用Sidekiq,并且已经配置了25个 Sidekiq进程。 那些也吃了很多内存。 Sidekiq进程消耗的内存与Passenger RackApp进程占用的内存一样多,因为这两个进程都将整个应用程序(包括Rails)加载到内存中。 尝试减少Sidekiq进程的数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.