Rails服务器异常报错-内存不足

昨晚网站监测报告网站异常死机,访问一直报50x错。半夜起来看问题,发现网站邮件并没有报错,于是ssh进服务器看日志查找问题。说下我的云服务器,配置很低1GRAM和单核CPU,运行着一个rails网站和一个wordpress博客。

个人原创,版权所有,转载请注明原文出处,并保留原文链接:

http://www.embbnux.com/2015/07/26/rails_server_error_for_memory_no_enough/

一、问题的发现

这次报错的主要是rails服务,我的rails服务基于nginx与passenger.首先查看rails的log发现死机的时候并未有日志留下。

继续查看nginx的日志发现是passenger死了,并且watchdog企图重启passenger报内存不足出错。日志显示如下:

Cannot allocate memory - fork(2)
Errno::ENOMEM

发现问题所在了,就是1GB的内存不够用了。

二 问题的解决

查看内存占用ps -aux发现了几个内存占用大户: mysqld , php, passenger ,nginx, sidekiq

我昨天给网站加了sidekiq用于异步处理一些耗时操作,发现竟然占了160m的内存,队列有25个,首先处理一下你:把sidekiq的concurrency降到5,内存就下降了一半。

rails作为一个内存大户,每起一个大约就占了100M的内存,而我passenger_max_pool_size设置为10个,所以当访问增大时passenger最大能占掉大约1000M的内存,当然是我服务器所不能承受之重,这里把passenger_max_pool_size设置为5个,内存小实在没办法,只能降低性能了。

php的pool之间已经减少了,这里就不再变了。

重启nginx,网站继续正常运行,我继续睡大觉哈哈。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.