感谢:http://www.178linux.com/58067
发现错误:
Redis Write error saving DB on disk: No space left on device
image.png
使用命令查看空间占用:
$ df
image.png
发现其中,/dev/vda1 占用空间接近100%,这个应该是阿里云服务器中的挂载的磁盘,也就是说磁盘空间已经接近满了。那么这时候能够实现应该是删除一些无用数据或者磁盘扩容。
当然为了解决目前的问题,应该去查看各个文件夹的空间占用,这时首先想到的是日志文件/var/log
、以及数据库相关文件/var/lib
,当然还有项目目录/www
(nginx默认为/var/www/html)。
使用该命令,查看某个文件夹所占用空间信息。
$ du -sh
image.png
可以看到,项目目录 6.1 G,log目录 4.8G,库目录为 11G。
项目中使用七牛,本地文件会很少,理论上说就一点日志文件,怎么可能这么大呢?
于是继续排查。
使用该命令,按顺序查看大文件信息
du /www | sort -nr | more
image.png
这时,发现有一个项目的 debugbar 竟然没关,于是删除之。
然后再按着这个思路检查一下其他文件,然后删除即可。
但是,感觉一直在写东西,硬盘空间一直在涨。
image.png
image.png
重启服务器之后好了
image.png
image.png
偶然发现一个 IP 正在爬数据:
image.png
使用 nginx 屏蔽掉 该IP:
在 HTTP config 里面
deny 112.10.100.117
这时发现,它被 403 了。但是这时,他换了一个IP。
此时,在 Laravel 的中间件,在中间件里记录下所有访问用户、IP、以及整个路由 URL 地址。
这时,最终把这个人啾了出来。
最后得到上级答复是,分配给了一个人导出所有数据,这个人写了脚本去扒取数据。
总结:
- 接口必须使用频率限制
Laravel 中的 throttle 中间件可以搞定
- 必须添加操作日志
Laravel 中的 Log 解决