一台Ubuntu服务器,已经正常运行半年有余,最近频繁出现无法提供服务的情况。
服务器上仅安装了公司内部使用的 Wordpress 和 Redmine 系统,访问量很小。
服务器硬件
- 2.5G 内存
- 100G 硬盘
- CPU Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
服务器软件
- Ubuntu x64 12.04.3 LTS
- Apache/2.2.22 (Ubuntu)
- mysql Ver 14.14 Distrib 5.5.32, for debian-linux-gnu (x86_64) using readline 6.2
- ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
- PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch (cli) (built: Sep 4 2013 20:00:51)
故障现象
出现故障时,redmine无法访问,ruby报错无法连接数据库。
远程上服务器,发现swap基本用完,free经常为0(这张截图中还有15M)。
重启 apache2 之后,swap恢复正常
重启 mysql 的时候发现 mysql 服务已经挂了。
故障频率
这种现象起先大约2~3天一次,重启mysql 和apache后可正常运行一段时间。最近为几个小时一次。
重启服务器并不能减缓或解决这种现象。
求解决方案和思路,谢谢!
以我的估计,这个内存怎么想都是够用的。我的思路是空载冷启动系统,然后一个一个服务往上挂,看挂到哪个服务出问题
kernel说的很对,你最开始占用超标apache的内容占用什么样?
感觉上apache不应当这样,是在不知道的话尝试自己编译一个apache跑着试试?
你重启apache以后,内存的free也增长上去了,你最开始的截图里面没有看到apache的内存使用量是多少,按照内存使用量排序可以看一下apache和mysql消耗内存的增长速度。如果当机几秒钟没关系 可以考虑用cron job 在夜间定期重启apache和mysql。
访问量很小2.5G的内存没理由用完吧。可以用这个脚本看看哪个进程消耗了多少内存。
如果内存真的不够还是加内存吧,现在内存都白菜价了。