项目场景:
- 使用2核4G的服务器搭建了基于docker的若干服务
问题描述:
- 首先说现象,整个服务崩溃无法访问
- 进入服务器后使用
docker ps
命令无响应
原因分析:
在线上经历来讲,我遇到过两次这个现象,分别在不同的项目中,排除与代码层面的问题,毫无疑问,这个问题是致命的,一旦发生,整个服务瘫痪,我记不清第一次出现这个问题是什么原因造成的了。所以下面说的问题定位方法仅供参考
- 毫无疑问,重启服务器是能够解决的,但这是下下策,我们需要找到问题根源。
- 查看磁盘使用情况,
df -h
- 查看端口占用情况,确保是否是
docker崩溃
使用netstat -ntpl
- 内存是否充足,使用
free -m
或者top
查看,(我估计这次事故就是此原因造成的,但我无法论证,因为我修改内核参数min_free_kbytes时,服务器居然重启了)
解决方案:
- 为了避免这种问题的发生,我们在部署docker时,肯定就要做到服务的抗重启后自动启动。这是服务恢复的重要环节
- 现在我估计是内存不足造成的。如果为了节约硬件成本,不想提升内存,那么我们就得优化Linux内存管理
Linux内存管理优化
总结
其实看完这么多也没啥实质性的方案解决,仅仅是给一个处理思路,需要在意的因素。