论坛首页 Ruby版 rails

lighttpd关闭以后,dispatch.fcgi进程仍然存在?

浏览 557 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-03-06
按robbin的文章:http://www.javaeye.com/topic/43228 装完以后
启动lighttpd,会启动10个dispatch.fcgi进程,每个进程占用内存50M左右,没有访问也不会释放内存。
然后关闭lighttpd服务,10个dispatch.fcgi进程仍然存在,每个还是占用50M内存。
重新开启lighttpd,会重新开10个dispatch.fcgi进程,之前的10个还会存在。
反复重启几次lighttpd,内存就耗尽了。
这应该是什么原因引起的呢?
我是按robbin的教程一步一步安装的。

系统环境:
centos5.0.x86_64
fcgi-2.4.0
ruby-cgi-0.8.7
lighttpd-1.4.18
   
最后更新时间:2008-03-06
正常情况下,关闭Lighttpd以后,dispatch进程就会销毁,我不清楚你怎么会出现这种情况。

但是在dispatch进程处理请求的时候关闭lighttpd,dispatch进程并不会马上关闭,而是处理完毕当前请求,才会关闭掉。一些极端情况下,可能会导致dispatch进程一直不关闭,dispatch进程就会越来越多。解决办法很简单 killall -9 dispatch.fcgi,只管杀进程就好了。
   
0 请登录后投票
最后更新时间:2008-03-07
是啊,我现在都是在kill杀进程,但我想知道从哪里可以找到这个的原因
我又反复装了几次,还是不行,dispatch进程就是不会自己销毁
有没有什么地方让我可以知道为什么会发生这种情况的原因呢?
   
0 请登录后投票
最后更新时间:2008-03-07
另外lighttpd开启以后,每个dispatch.fcgi进程都会占用50M左右内存,没有访问也是占这么大,这个正常不?
   
0 请登录后投票
最后更新时间:2008-03-07
inosin 写道
另外lighttpd开启以后,每个dispatch.fcgi进程都会占用50M左右内存,没有访问也是占这么大,这个正常不?

50MB很正常的,一个繁忙的Rails进程内存消耗要大得多,JavaEye每个FastCGI进程消耗180MB物理内存。

按道理来说,如果没有访问请求,关闭lighttpd以后,dispatch.fcgi就应该关闭掉了。
   
0 请登录后投票
最后更新时间:2008-03-07
又装了一遍,还是不行
没办法,只要把 killall 加到/etc/init.d/lighttpd里的stop()了
   
0 请登录后投票
最后更新时间:2008-03-07
http://www.javaeye.com/topic/168989

可以自己手工控制dispatch.fcgi的启动和关闭,不要用lighttpd去控制它。
   
0 请登录后投票
最后更新时间:2008-03-07
好方法,学习了~!
这样就可以为每个ror应用单独开dispatch.fcgi,重启某一个就不会影响其他应用了
   
0 请登录后投票
最后更新时间:2008-03-07
inosin 写道
好方法,学习了~!
这样就可以为每个ror应用单独开dispatch.fcgi,重启某一个就不会影响其他应用了

如果你要为每个应用单独启动fcgi,那么dispatch.sh的脚本要修改一下,调用spawn-fcgi的时候可以加一个参数,让他把进程PID写入一个硬盘文件,那么你就可以在关闭脚本当中 kill `cat rails.pid`的方式来杀相应的fcgi进程了。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐