首页 文章

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

提问于
浏览
1

我目前通过Cloud 66在数字海洋VPS(1GB RAM)上设置了一个rails应用程序 . 问题在于VPS的内存充满了Passenger进程 .

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 命令时,输出如下:

htop output

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

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

New Relic server monitoring output

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

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

2 回答

  • 4

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

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

  • 1

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

    我看到你're using Sidekiq and you'已经配置了 25 Sidekiq进程 . 那些也吃了很多记忆 . Sidekiq进程占用的内存与Passenger RackApp进程一样多,因为它们都将整个应用程序(包括Rails)加载到内存中 . 尝试减少Sidekiq进程的数量 .

相关问题