Rails + Passenger-了解重复请求后记忆的增加

时间:2018-09-07 12:07:10

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

通过与Rails重复相同的请求,我发现内存从137MB增加到323MB。我想了解其背后的机制。

关于我的nginx-passenger配置,我在我的vhost文件中设置了最少2个实例,最大实例数为5

以下是我可以重做的步骤

  • 我使用passenger-config restart-app重新启动应用程序
  • 在重新启动应用程序时,服务器上会进行一些运行状况检查,因此,Passenger将使用给定的内存占用量启动2-3个实例。并非目前为止,仅执行了API请求(更确切地说,未执行html视图呈现,仅执行了json或json:api)。此时,我看到的是passenger-status

/websites/example/current/public (production):
  App root: /websites/example/current
  Requests in queue: 0
  * PID: 6801    Sessions: 0       Processed: 3       Uptime: 17s
    CPU: 1%      Memory  : 121M    Last used: 9s ago
  * PID: 6808    Sessions: 0       Processed: 1       Uptime: 16s
    CPU: 1%      Memory  : 100M    Last used: 10s ago
  * PID: 6836    Sessions: 0       Processed: 0       Uptime: 9s
    CPU: 0%      Memory  : 64M     Last used: 9s ago

现在让我们假设我在localhost上执行手动curl,它将从.html.erb模板curl http://localhost:3000/

渲染某些页面
  Requests in queue: 0
  * PID: 6801    Sessions: 0       Processed: 20      Uptime: 1m 40s
    CPU: 2%      Memory  : 232M    Last used: 2s ago
  * PID: 6808    Sessions: 0       Processed: 1       Uptime: 1m 39s
    CPU: 0%      Memory  : 100M    Last used: 1m 33s ago
  * PID: 6836    Sessions: 0       Processed: 0       Uptime: 1m 32s
    CPU: 0%      Memory  : 66M     Last used: 1m 32s ago

内存跃升至230MB。我知道这可能来自资产流水线,可能是一些视图片段的缓存。我想这是预料之中的。

现在我很难理解:我一直在向curl http://localhost:3000/发送垃圾邮件(第三个应用消失了,因为没有足够的并行请求,正常)

Requests in queue: 0
  * PID: 6801    Sessions: 0       Processed: 168      Uptime: 3m 40s
    CPU: 2%      Memory  : 332M    Last used: 2s ago
  * PID: 6808    Sessions: 0       Processed: 3       Uptime: 3m 39s
    CPU: 0%      Memory  : 101M    Last used: 1m 33s ago

因此,从230MB增加到330MB(即使在同一URL上发送了更多请求后,从此处停止增长)。任何人都可能对这笔涨价有什么了解?

编辑:

我已经尝试了另一次乘客配置重新启动应用程序和发送卷曲请求的垃圾邮件,现在应用程序的内存占用停止在242MB处增加...不太确定会发生什么。我尝试清除了shared / tmp / cache文件夹(我使用本地FS作为缓存存储),但是它似乎不是从那里来的。

0 个答案:

没有答案