【问题标题】:Passenger Spawning a lot of Rack Applications乘客产生大量机架应用程序
【发布时间】:2012-03-26 10:35:30
【问题描述】:

passenger-memory-stats的输出

----- Passenger processes -----
PID    VMSize    Private  Name
-------------------------------
28572  207.4 MB  ?        Rack: /home/myapp/application
28580  207.0 MB  ?        Rack: /home/myapp/application
28588  206.0 MB  ?        Rack: /home/myapp/application
28648  206.5 MB  ?        Rack: /home/myapp/application
29005  23.0 MB   ?        PassengerWatchdog
29008  100.5 MB  ?        PassengerHelperAgent
29010  43.1 MB   ?        Passenger spawn server
29013  70.8 MB   ?        PassengerLoggingAgent
29053  202.0 MB  ?        Passenger ApplicationSpawner: /home/myapp/application
29105  202.3 MB  ?        Rack: /home/myapp/application
29114  202.3 MB  ?        Rack: /home/myapp/application
29121  202.3 MB  ?        Rack: /home/myapp/application
29130  202.3 MB  ?        Rack: /home/myapp/application
29138  202.3 MB  ?        Rack: /home/myapp/application

这看起来像很多衍生的进程...这是一个目前正在开发中的应用程序,没有人(据我所知)点击它...

passenger-status的输出

  App root: /home/myapp/application
  * PID: 29105   Sessions: 1    Processed: 0       Uptime: 15m 11s
  * PID: 29114   Sessions: 1    Processed: 0       Uptime: 14m 0s
  * PID: 29121   Sessions: 1    Processed: 0       Uptime: 14m 0s
  * PID: 29130   Sessions: 1    Processed: 0       Uptime: 14m 0s
  * PID: 29138   Sessions: 1    Processed: 0       Uptime: 14m 0s

首先,这正常吗?

二、可能的原因?

【问题讨论】:

  • passenger-status 说什么?
  • @SergioTulentsev 更新了带有输出的问题...只需再次运行 passenger-memory-stats,它就少了一个 Rack 进程
  • 从这个输出中,我会说你有挂起请求。也就是说,请求进入无限循环或其他什么。因此,当下一个请求进来时,没有多余的工人,Passenger 必须产生另一个。
  • @SergioTulentsev 谢谢,你将如何解决这个问题?这是代码问题吗?还是 nginx+passenger 的问题?
  • 当我拥有其中一个时,它总是很慢的数据库。尝试分析您的应用并找出为什么您的请求需要这么长时间。

标签: ruby-on-rails ruby nginx passenger rack


【解决方案1】:

对于遇到 Rails 挂起问题的任何人...如果您在内存有限的 VPS 上运行,请检查并确保调整您的 max_pool,以免产生太多应用程序实例以供系统处理.默认值为 6,这对于内存受限的 VPS 来说显然太多了。

关于最大池设置的文档: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerMaxPoolSize

【讨论】:

    【解决方案2】:

    您的应用程序的早期版本中可能存在某些进程。我们应用的 Rack 处理每个指向我们应用的特定版本的点。

    95171 2491.8 MB 4.8 MB 机架:/Deploy/theapp/releases/20120530013237

    并且有多个进程指向许多不同的版本。这让我得出结论,这些都是在应用重新启动时遗留下来的。

    我认为可能是触摸 tmp/restart.txt 而不是重新启动 apache 会产生这种效果。所以我将 :use_sudo 设置为 true,然后使用 'run "#{try_sudo} /opt/local/apache2/bin/apachectl graceful"' 重新启动,而我看到的唯一 Rack 进程是那些刚刚启动的进程。

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2011-04-18
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2016-06-19
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多