【开发日记】记一次公司服务器中Redis服务问题排查
问题
客户端访问服务器时提示一下报错:
描述为Redis
报错,连接不了Redis。
排查
进入服务器终端,由于使用的是FinalShell
界面中就已经提示了磁盘已经满了的状态,所以基本可以确定为因为磁盘满了导致的。
【查看磁盘占用】
使用以下命令查看当前系统磁盘占用:
df -h
命令输出如下所示:
文件系统 容量 已用 可用 已用% 挂载点
...
/dev/vda1 50G 49G 0 100% /
overlay 50G 49G 0 100% /data/docker/overlay2/...
...
结果显示确实是磁盘已经满了,并且基本是docker占用;但是磁盘容量只有50G,这不科学,公司服务器的磁盘容量再小也不可能这么小。
【检查磁盘挂载】
使用以下命令查看当前系统磁盘挂载情况:
lsblk
输出内容如下所示:
NAME FSTYPE SIZE MOUNTPOINT
sr0 iso9660 203.7M
vda 50G
└─vda1 ext4 50G /
vdb ext4 200G
输出结果中FSTYPE是文件系统类型,表示设备上格式化了的文件系统类型。
输出结果中MOUNTPOINT是挂载点,表示这个设备当前被挂载到哪个位置上了。
结果显示确实是有一个200G磁盘未挂载。
【解决Docker占用】
进入上面docker目录cd /data/docker
,在该目录下执行以下命令来查看各目录大小:
du -h --max-depth=1 ./
这个命令会输出目标路径的空间使用情况,--max-depth=1
表示命令遍历目录的深度
输出内容较多,所以这里省略了,通过以上命令输出结果来看目录containers
占用最大,继续使用以下命令查看该目录的详细占用:
du -h --max-depth=1 ./containers/
命令输出内容如下所示:
...
12G ./containers/c5a7aaa213d8077ab3792ec93029f7929882eb498ab944f77b93273e336b9e72
...
结果显示该容器占用磁盘较大,使用如下命令查看该容器目录对应的是哪个容器:
docker inspect -f '{{.Id}} - {{.Name}} - {{range .Mounts}}{{.Source}} -> {{.Destination}}; {{end}}' $(docker ps -q)
上面这个命令的作用是以我设定好的格式列出所有正在运行容器的核心信息。
输出内容如下所示:
...
c5a7aaa213d8077ab3792ec93029f7929882eb498ab944f77b93273e336b9e72 - /gitlab - ...
...
从结果中可以看到原来是gitlab占用太多导致。
进入/data/docker/containers
目录下占用最多的容器目录,并使用 ls -lh
命令展示所有的文件及目录占用大小发现占用最多的是一个log文件。
解决
到这里就已经找到罪魁祸首了,由于服务器磁盘太小,而gitlab一直在输出日志占用了太多的磁盘空间,由于服务器中的gitlab不是我搭建的,不知道是否有用,只能暂时把服务停掉删掉日志文件。
最后重启Redis服务和数据库服务,服务恢复,问题解决。
奉劝各位在服务器磁盘容量有限的情况下谨慎输出大量日志,非必要,不输出。