我目前通过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
命令时,输出如下:
似乎有很多Passenger Rackup流程。我们还使用默认配置运行Sidekiq。
New Relic Server报告以下内存使用情况:
我尝试调整Passenger设置,添加负载均衡器和另一台服务器,但老实说不知道该怎么做。我怎样才能找出造成这么多内存使用的原因?
更新:由于一些变化,我不得不重新启动ngnix,它似乎释放了相当多的内存。
答案 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进程的数量。