论坛首页 编程语言技术论坛

lighttpd + fastcgi 真耗内存呀

浏览 8015 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-12  
最近换了RoR后,使用的是Lighttpd + FastCGI,但是发现内存消耗很大,还以为是内存泄露,以至于监控系统每天都报警两次Swap分区消耗超过80%,不知道你们有这种情况没?

我们的服务器配置是4核单Intel Xeon(R) CPU 5130 2.00GHz,8G内存,300G SCSI硬盘,单台服务器每台的PV在300万以上。

最近搜索了下,发现PHP的cgi也有这个问题,原因是php-cgi会在每个请求结束的时候回收脚本使用的全部内存,但是并不会释放给操作系统,而是继续持有以应对下一次PHP请求。这样做大概是为了减少内存碎片化或者解决从系统申请内存之后又释放回操作系统所需要的时间不可控问题。

同样,ruby的fastcgi也有类似的问题,内存一直得不到释放,如下:

             total       used       free     shared    buffers     cached
Mem:       8165016    8145136      19880          0      38064     154864
-/+ buffers/cache:    7952208     212808
Swap:      2048248      17212    2031036

下午时才用了5G,到现在就8G了。

现在是写了个脚本,定时监控内存消耗,消耗大了就killall -9 fcgi,不过这样貌似也不太好吧,还在研究中,不知道哪个参数可以控制fastcgi的请求数量限制的?
   发表时间:2011-09-22  
咋没人来一起讨论下呢?我可以帖下我的服务器配置参数。大家都用什么web server呢?Mongrel? Unicorn? Passenger? 还是?
0 请登录后投票
   发表时间:2011-09-22  
passenger,不过我没啥经验
0 请登录后投票
   发表时间:2011-09-23  
检查检查代码和使用的第三方库
iteye每天一百多万的动态PV,每个进程也就两百多M
0 请登录后投票
   发表时间:2011-09-23  
inosin 写道
检查检查代码和使用的第三方库
iteye每天一百多万的动态PV,每个进程也就两百多M


并发量比较大的地方有两个,数据接口(都是些内容列表之类的),大部分压力是靠memcached来解决的,并发量大了,内存消耗不一定是按照固定的比例提高的。

gem 'rails', '3.0.3'
gem "haml", "3.0.24"
gem "jquery-rails", "0.2.5"
gem 'will_paginate', "3.0.pre2"
gem 'inherited_resources', '~> 1.2.1'
gem "mechanize"
gem "hpricot"
gem "apns"
gem "liquid"
gem "dynamic_form"
gem "json"
gem "paperclip"
gem "open4"
gem 'delayed_job'
gem 'mysql2'
gem 'whenever', :require => false
gem "devise"
gem "acts_as_list"
gem "acts_as_tree"
gem 'memcache-client'
gem 'geoip'
gem 'ipparse'


0 请登录后投票
   发表时间:2011-09-23  
偶做过用php 调命令kill mysql的connection,不是办法的办法
0 请登录后投票
   发表时间:2011-09-23  
我用 nginx+unicorn的方式,通过god来管理unicorn进程。
god可以检查unicorn占用的内存大小,大于一定值的时候发送一个USR2的signal,让unicorn重启。不过unicorn这种方式的重启是处理完当前请求后再重启,所以用户不会感觉到。
0 请登录后投票
   发表时间:2011-09-24  
t0uch 写道
我用 nginx+unicorn的方式,通过god来管理unicorn进程。
god可以检查unicorn占用的内存大小,大于一定值的时候发送一个USR2的signal,让unicorn重启。不过unicorn这种方式的重启是处理完当前请求后再重启,所以用户不会感觉到。


也是个办法,至少可以先解决当前问题。

还有没,其他朋友继续呀!
0 请登录后投票
   发表时间:2011-09-25  
今天是彻底的满了:
$ free
             total       used       free     shared    buffers     cached
Mem:       8165016    8144672      20344          0       6036      20880
-/+ buffers/cache:    8117756      47260
Swap:      2048248    2048248          0
0 请登录后投票
   发表时间:2011-09-25  
我觉得应该是内存泄露
  我用mechanize写个一个多线程采集,mechanize会添加到history 导致page一直被history引用而无法释放  最后跑到1个小时  机子就挂了 
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics