Ubuntu服务器swap占用100%导致无法访问

一台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报错无法连接数据库。

Ruby 无法连接数据库

远程上服务器,发现swap基本用完,free经常为0(这张截图中还有15M)。

swap 用完

重启 apache2 之后,swap恢复正常

重启 apache2

重启 mysql 的时候发现 mysql 服务已经挂了。

重启 mysql

故障频率

这种现象起先大约2~3天一次,重启mysql 和apache后可正常运行一段时间。最近为几个小时一次。

重启服务器并不能减缓或解决这种现象。

求解决方案和思路,谢谢!

阅读 9.6k
4 个回答

访问量很小2.5G的内存没理由用完吧。可以用这个脚本看看哪个进程消耗了多少内存。
如果内存真的不够还是加内存吧,现在内存都白菜价了。

以我的估计,这个内存怎么想都是够用的。我的思路是空载冷启动系统,然后一个一个服务往上挂,看挂到哪个服务出问题

你重启apache以后,内存的free也增长上去了,你最开始的截图里面没有看到apache的内存使用量是多少,按照内存使用量排序可以看一下apache和mysql消耗内存的增长速度。如果当机几秒钟没关系 可以考虑用cron job 在夜间定期重启apache和mysql。

kernel说的很对,你最开始占用超标apache的内容占用什么样?
感觉上apache不应当这样,是在不知道的话尝试自己编译一个apache跑着试试?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题