1. 首先是发现服务很多异常记录,如下
Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error
2. 很明显是redis保存RDB快照时出问题了,看一下redis服务的日志,发现redis挂了
3. 重启redis服务,发现服务器起不来
4. 这个时候看了一下磁盘和内存的使用情况,发现内存没问题,磁盘满了。100%占用(图中36%占用,是因为已经解决,解决前为100%)
5. 可以看出是docker导致占用爆满,但是这个服务器只起了4个服务,redis、seata、nacos和rabbitMQ
6.直接cd /var/lib/docker/overlay2,然后输入ls
这个时候很懵,发现这个日志不知道分别对应哪个服务,更不知道哪些可以删除,输入命令
du -sh * | sort -hr
会把当前目录文件夹从大到小排序,记住第一个文件夹,记前几个字符就好了
这个时候分别去看容器中的每个服务,输入命令
docker inspect seata
找到这个,发现就是我们要找的服务。
这个时候的做法有两种:
方式一:直接删除/var/lib/docker/overlay2中的文件(因为磁盘满了,没办法备份),因为redis还是挂的,先启动redis服务,保证线上服务可用,但这个时候输入df -h会发现磁盘占用并没有减少,因为被进程占用着,输入lsof | lsof | grep deleted,看到待删除的文件
方式二(建议):重启seata服务即可,把其他挂了的服务起来就好
后续方案:
1. 对磁盘进行挂载,挂载很简单,网上随便搜一下都有(注意最好别覆盖已有目录,如果不小心覆盖了也没关系,卸载挂载,重新操作就好了)
2. seata服务运行2个月,就吃了25G磁盘,为什么这么占磁盘,后续去官网看看。
3. 找时间做服务器监控告警及系统监控告警(此次异常是用户反馈->客服反馈->技术排查->技术解决),此次影响线上1个多小时