如何改善Nginx,Rails,Passenger内存使用情况?

时间:2014-09-23 09:24:40

标签: ruby-on-rails memory nginx passenger sidekiq

我目前通过Cloud 66在数字海洋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流程,OK。

但是当我使用htop命令时,输出如下:

htop output

似乎有很多Passenger Rackup流程。我们还使用默认配置运行Sidekiq。

New Relic Server报告以下内存使用情况:

New Relic server monitoring output

我尝试调整Passenger设置,添加负载均衡器和另一台服务器,但老实说不知道该怎么做。我怎样才能找出造成这么多内存使用的原因?

更新:由于一些变化,我不得不重新启动ngnix,它似乎释放了相当多的内存。

2 个答案:

答案 0 :(得分:4)

按Shift-H隐藏htop中的线程。那些不是进程,而是进程中的线程。关键栏目是RSS:你有两个乘客流程,209MB和215MB,一个Sidekiq流程,154MB。

简短回答:对于Rails应用程序来说,这是完全正常的内存使用情况。如果你想要每个进程多个进程,1GB只是有点小。我将乘客减少到一个过程。

答案 1 :(得分:1)

您的应用程序是否创建了子进程?如果是这样,那么这些额外的“Passenger RackApp”流程可能实际上并不是由Phusion Passenger创建的流程,而是由您自己的应用程序创建的流程。您应该仔细检查您的应用程序是否生成子进程以及是否正确清理这些子进程。还要仔细检查您使用的库是否也正确清理其子进程。

我看到您正在使用Sidekiq并且您已配置 25 Sidekiq进程。那些也吃了很多记忆。 Sidekiq进程占用的内存与Passenger RackApp进程一样多,因为它们都将整个应用程序(包括Rails)加载到内存中。尝试减少Sidekiq进程的数量。