【问题标题】:Ruby and rails perfomance issue, serverRuby 和 Rails 性能问题,服务器
【发布时间】:2011-03-16 11:39:54
【问题描述】:

我正在运行已部署的 Rails 网络服务器,但遇到内存问题。每次我尝试调用 sendmail 时都会收到 Errno::ENOMEM 错误。当我在我的服务器上运行“top”时,它显示有 2 个 ruby​​1.8 进程正在运行,每个进程都在消化大约 40% 的内存。这是由我的代码泄漏引起的,还是我同时启动了两个 ruby​​ 进程?

这两个进程都由我的部署者帐户运行,然后在我推送到我的生产 git 存储库(使用 pushand)时调用它们。我试图找出这是否是自然的(即服务器需要升级)或者我的设置是否存在某种错误。我最近将我的内存从 256 mb 升级到了 512 mb,之前没有这个问题。

问题是阻止访问者创建用户,因为应用程序在他们应该收到激活电子邮件时抛出错误。

请注意,我在 ubuntu 设置上运行 rails 2.1.0,带有 apache 和乘客。

【问题讨论】:

  • 当我重新启动 apache 内存使用量急剧下降。我已将 PoolIdleTime 设置从 1 天减少到 300 秒,因此乘客进程会时不时地被杀死。
  • 我也在研究 Rack::Bug、Oink 和 Memorylogic。我发现link 非常有用。
  • 问题仍然存在。我会尝试和优化领域,如果找到答案,我会回到这里。
  • 内存使用率很快就上升到 80%(现在是 3 个进程)。

标签: ruby-on-rails ruby ubuntu passenger


【解决方案1】:

好的,伙计们,我想这是我必须帮助自己的情况之一,我真的很高兴我做到了。我没有使用任何我链接到的工具。

我通过以下方式登录了我的服务器。 ssh 并在两个屏幕窗口中运行两个命令:top 和 tail -f /var/www/mysite.com/log/production.log。

我查看了实时日志文件,并注意到一个页面请求需要很长时间才能加载 - 用户可以在该页面中显示他/她的图像,其中每个用户都由他们的姓名标识,via。 act_as_taggable_on。单个请求耗时 6 秒。

而且它一直在弹出。我想我看过 6 或 7 次,我决定进一步调查。它总是相同的用户 ID,所以我决定查找用户。事实证明,用户有一个空白名称“”,而标记的图像是由

Asset.tagged_with(@user.name, :on => "users")

现在在我的应用程序中,有成千上万的资产,Asset.tagged_with("", :on => "users") 将返回所有这些资产,从而占用我的内存。

现在我已经处理了用户名称为空的情况,并且所有新用户都需要它。尽管没有人帮忙,但我仍然对 stackoverflow 心存感激,因为有时它就像问问题来解决问题一样简单。

【讨论】:

  • 很好的发现,我认为没有人能比你的“对墙说话”技术更好地帮助你解决这个问题。如果您的数据库支持 CHECK 约束,那么我会为此添加一个,并为额外的妄想症创建尽可能多的列 NOT NULL:损坏的代码很容易修复,损坏的数据不多。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2018-10-05
  • 2016-12-30
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
相关资源
最近更新 更多