记一次Reids磁盘空间写满的后的操作处理

感谢:http://www.178linux.com/58067

发现错误:

Redis Write error saving DB on disk: No space left on device
image.png

使用命令查看空间占用:

$ df
记一次Reids磁盘空间写满的后的操作处理_第1张图片
image.png

发现其中,/dev/vda1 占用空间接近100%,这个应该是阿里云服务器中的挂载的磁盘,也就是说磁盘空间已经接近满了。那么这时候能够实现应该是删除一些无用数据或者磁盘扩容。

当然为了解决目前的问题,应该去查看各个文件夹的空间占用,这时首先想到的是日志文件/var/log、以及数据库相关文件/var/lib,当然还有项目目录/www(nginx默认为/var/www/html)。

使用该命令,查看某个文件夹所占用空间信息。

$ du -sh
记一次Reids磁盘空间写满的后的操作处理_第2张图片
image.png

可以看到,项目目录 6.1 G,log目录 4.8G,库目录为 11G。
项目中使用七牛,本地文件会很少,理论上说就一点日志文件,怎么可能这么大呢?
于是继续排查。

使用该命令,按顺序查看大文件信息

du /www | sort -nr | more
记一次Reids磁盘空间写满的后的操作处理_第3张图片
image.png

这时,发现有一个项目的 debugbar 竟然没关,于是删除之。

然后再按着这个思路检查一下其他文件,然后删除即可。

但是,感觉一直在写东西,硬盘空间一直在涨。


记一次Reids磁盘空间写满的后的操作处理_第4张图片
image.png
记一次Reids磁盘空间写满的后的操作处理_第5张图片
image.png

重启服务器之后好了


记一次Reids磁盘空间写满的后的操作处理_第6张图片
image.png
记一次Reids磁盘空间写满的后的操作处理_第7张图片
image.png

偶然发现一个 IP 正在爬数据:


image.png

使用 nginx 屏蔽掉 该IP:
在 HTTP config 里面

deny 112.10.100.117

这时发现,它被 403 了。但是这时,他换了一个IP。

此时,在 Laravel 的中间件,在中间件里记录下所有访问用户、IP、以及整个路由 URL 地址。
这时,最终把这个人啾了出来。

最后得到上级答复是,分配给了一个人导出所有数据,这个人写了脚本去扒取数据。

总结:

  1. 接口必须使用频率限制

Laravel 中的 throttle 中间件可以搞定

  1. 必须添加操作日志

Laravel 中的 Log 解决

你可能感兴趣的:(记一次Reids磁盘空间写满的后的操作处理)