我们有一台服务器,该服务器上有10个正在运行的mongrel_cluster实例,前面带有apache,并且不时挂起一个或某些实例。 在数据库中看不到任何活动(我们正在使用activerecord会话)。 带有innodb表的mysql。 show innodb status不显示任何锁定。 show processlist不显示任何内容。

服务器是Linux debian 4.0

Ruby是:ruby 1.8.6(2008-03-03补丁程序级别114)[i486-linux]

Rails是:Rails 1.1.2(是的,很旧)

我们正在使用本机mysql连接器(gem安装mysql)

“ strace -p PID”在循环中为挂杂种进程提供了以下内容:

gettimeofday({1219834026, 235289}, NULL) = 0
select(4, [3], [0], [], {0, 905241})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235477}, NULL) = 0
select(4, [3], [0], [], {0, 905053})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235654}, NULL) = 0
select(4, [3], [0], [], {0, 904875})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235829}, NULL) = 0
select(4, [3], [0], [], {0, 904700})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236017}, NULL) = 0
select(4, [3], [0], [], {0, 904513})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236192}, NULL) = 0
select(4, [3], [0], [], {0, 904338})    = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236367}, NULL) = 0
...

我使用了lsof,发现该进程使用了​​67个文件描述符(lsof -p PID | wc -l)

还有什么其他方法可以调试此文件,以便例如确定哪个文件描述符为“错误”文件? 还有其他信息或建议吗? 其他人看到了吗?

该站点已被合理使用,但并不过分使用,平均负载通常约为0.3。


一些其他信息。 我安装了mongrelproctitle来显示挂起的进程在做什么,看来它们挂在使用file_column /数据库中的图像/ rmagick来显示图像以调整图像大小并使其变为灰度的方法上。

问题并没有定论,但这是一种怀疑。 以下内容明显有问题吗? 如果订单中不包含图片,则该方法显示静态图片,否则根据订单调整图片的大小。 缓存是为了使图像每次都能在浏览器中更新。 图像会插入带有普通图像标签的页面中。

码:

 def preview_image
    @order = session[:order]
    if @order.image.nil?
      @headers['Pragma'] = 'no-cache'
      @headers['Cache-Control'] = 'no-cache, must-revalidate'
      send_data(EMPTY_PIC.to_blob, :filename => "img.jpg", :type =>
"image/jpeg", :disposition => "inline")
       else
      @pic = Image.read(@order.image)[0]
      if (@order.crop)
       @pic.crop!(@order.crop[:x1].to_i, @order.crop[:y1].to_i,
@order.crop[:width].to_i, @order.crop[:height].to_i, true)
      end
      @pic.resize!(103,130)
      @pic = @pic.quantize(256, Magick::GRAYColorspace)
      @headers['Pragma'] = 'no-cache'
      @headers['Cache-Control'] = 'no-cache, must-revalidate'
      send_data(@pic.to_blob, :filename => "img.jpg", :type =>
"image/jpeg", :disposition => "inline")
    end
  end

如果任何人都可以在其中找到任何问题,这是lsof输出。 不知道它将如何在此消息中格式化...

lsof: WARNING: can't stat() ext3 file system /dev/.static/dev
      Output information may be incomplete.
COMMAND     PID    USER   FD   TYPE     DEVICE      SIZE     NODE NAME
mongrel_r 11628 username  cwd    DIR        9,2      4096  1870688 
/home/domains/example.com/usernameOrder/releases/20080831121802
mongrel_r 11628 username  rtd    DIR        9,1      4096        2 /
mongrel_r 11628 username  txt    REG        9,1      3564   167172 
/usr/bin/ruby1.8
mongrel_r 11628 username  mem    REG        0,0                  0 
[heap] (stat: No such file or directory)
mongrel_r 11628 username  DEL    REG        0,8           15560245 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560242 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560602 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560601 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560684 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560683 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560685 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560568 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560607 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560569 
/dev/zero
mongrel_r 11628 username  mem    REG        9,1   1933648   456972 
/usr/lib/libmysqlclient.so.15.0.0
mongrel_r 11628 username  DEL    REG        0,8           15442414 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560546 
/dev/zero
mongrel_r 11628 username  mem    REG        9,1     67408   457393 
/lib/i686/cmov/libresolv-2.7.so
mongrel_r 11628 username  mem    REG        9,1     17884   457386 
/lib/i686/cmov/libnss_dns-2.7.so
mongrel_r 11628 username  DEL    REG        0,8           15560541 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560246 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560693 
/dev/zero
mongrel_r 11628 username  DEL    REG        0,8           15560608 
/dev/zero
mongrel_r 11628 username  mem    REG        9,1     25700   164963 
/usr/lib/gconv/gconv-modules.cache
mongrel_r 11628 username  mem    REG        9,1     83708   457384 
/lib/i686/cmov/libnsl-2.7.so
mongrel_r 11628 username  mem    REG        9,1    140602   506903 
/var/lib/gems/1.8/gems/mysql-2.7/lib/mysql.so
mongrel_r 11628 username  mem    REG        9,1   1282816   180935 
...
mongrel_r 11628 username    1w   REG        9,2    462923  1575329 
/home/domains/example.com/usernameOrder/shared/log/mongrel.8001.log
mongrel_r 11628 username    2w   REG        9,2    462923  1575329 
/home/domains/example.com/usernameOrder/shared/log/mongrel.8001.log
mongrel_r 11628 username    3u  IPv4   15442350                TCP 
localhost:8001 (LISTEN)
mongrel_r 11628 username    4w   REG        9,2 118943548  1575355 
/home/domains/example.com/usernameOrder/shared/log/production.log
mongrel_r 11628 username    5u   REG        9,1    145306   234226 
/tmp/mongrel.11628.0 (deleted)
mongrel_r 11628 username    7u  unix 0xc3c12480           15442417 
socket
mongrel_r 11628 username   11u   REG        9,1        50   234180 
/tmp/CGI.11628.2
mongrel_r 11628 username   12u   REG        9,1     26228   234227 
/tmp/CGI.11628.3

我已经安装了monit来监视服务器。 由于PID文件问题,还没有自动重启,但是也许我会得到支持删除过时的PID文件的最新版本。
实际解决问题会很不错,因为如果服务器需要一直重新启动(一天约10次),则有人会断开连接等。

发生这种情况时,杂种进程不会占用大量内存,并且计算机甚至都不会交换内存,因此这可能不是内存泄漏。

             total       used       free     shared    buffers     cached
Mem:       4152796    4083000      69796          0     616624    2613364
-/+ buffers/cache:     853012    3299784
Swap:      1999992         52    1999940

===============>>#1 票数:2

考虑使用ImageScience ,众所周知RMagick会泄漏大量内存并锁定。

===============>>#2 票数:1

《部署Rails应用程序》(循序渐进的指南)一书中的6.3章在Linux上安装和配置Monitoring Utility Monit以及使用它来监视mongrels上有一个很好的章节。 当它们出现故障时,它可以重新启动它们。

由于磁盘上存在重复的PID文件,因此较早版本的Mongrel无法重新启动。 较新的版本支持--clean选项,该选项将清除剩余的PID文件(如果存在)。 因此,您必须将Mongrel升级到支持--clean的版本,以解决过时的PID文件问题,仅Monit不能做到这一点。

  ask by Frontline translate from so

未解决问题?本站智能推荐:

1回复

Mongrel_Rails上的段错误开始

当我为我的应用程序运行mongrel_rails start时,出现以下错误: 我正在通过MacPorts运行Snow Leopard和Ruby,Rails和PostgreSQL 8.4。 更新:即使我尝试执行以上错误的mongrel_rails -h。 有什么想法吗?
1回复

Ruby进程吃100%cpu [关闭]

当我试图从我的应用程序注销时(使用设计)rails应用程序挂起并且ruby吃100%的CPU,在重新启动服务器之后它是stil frezeed(无法加载页面)。 只有当我删除并重新创建我的数据库时它才会消失。 我使用PostgreSQL,试图切换到MySQL,没有帮助。 使用mongrel
1回复

上传完成后如何删除杂种临时文件?

在我的Rails应用程序中,正在上传一些大文件(1 Gb),当我进入Windows temp文件夹时,杂种临时文件聚集在这里,但是我希望这些文件在上传完成后被删除。 谁能告诉我该怎么做? 这是我的红宝石版本:红宝石1.8.6(2007-09-24补丁程序级别111)[i386-msw
3回复

使用Mongrel的Windows上的Ruby On Rails

使用Mongrel在Ruby框架上运行Ruby On Rails的最佳教程在哪里? 我是服务器管理的新手,所以越详细就越好!
1回复

Mongrel :: DirHandler相当于Passenger

我正在使用Mongrel :: DirHandler来控制静态文件的响应头 - 这在我的开发机器上运行得很好。 我的生产机器使用Passenger所以我的标题没有设置。 使用Passenger时如何控制静态文件的标头? 来自我的environment.rb的片段:
3回复

在Ruby 1.9.3中安装Mongrel

如何成功安装Mongrel for ruby​​ 1.9.3 这是错误: 我已经尝试过sudo gem install mongrel --pre甚至有--source那个 我不知道为什么它不起作用。 它与Ruby 1.9.1及更高版本兼容吗?
3回复

RoR应用程序运行在mongrel开发但不生产

这是我对Ruby on Rails的第一次尝试。 刚刚为Heroku部署了一个非常简单的应用程序。 问题是我的应用程序在mongrel开发上运行完美无缺; 当我使用“mongrel_rails start -e production”运行时,我收到错误“我们很抱歉,但出了点问题。”
1回复

使用杂种丛集

有人可以向我解释为单个应用程序使用杂种集群的目的是什么? 如果您有3个运行的mongrel实例,则假定您使用apache进行负载平衡,并且用户连接到单个实例。 但是,将其用于单个应用程序是否有任何可能的改进? 谢谢
6回复

如何正常关闭Mongrel Web服务器

我的RubyOnRails应用程序使用Apache配置背后的通常一组mongrel进行设置。 我们注意到我们的Mongrel Web服务器内存使用量在某些操作上会变得非常大,我们真的希望能够随时动态地重新启动选定的Mongrel进程。 但是,由于我不会进入这里的原因,我们有时非常重要的是
1回复

Rails Mongrel服务器将不再加载任何内容

很长时间以来,我一直在使用Mongrel来运行我的Rails应用程序。 不幸的是,昨天,它决定停止工作。 当我尝试启动localhost以查看我的应用时,会发生以下情况: root @ whatever> RAILS_ENV =生产脚本/服务器 这总是启动Mong