服务器几个小时跑了30G的缓存之原因
客户的一台服务器,下午6点的时候清理空间后,有接近40G的空闲空间。
但是到晚上十点的时候,空间就满了。79G的空间,已经用了75G

追查原因:三个站,流量高达12G。

这大概率是被国外的AI或者黑客刷了。
因为下午的时候,他正好取消了我原本设置的对AI的屏蔽代码。
此时此刻,我们大概率知道问题所在了。
第一步:先删除掉网站的缓存,将空间清理出来。
删除缓存之后,空间一下子就出来了。
第二步:在后台关闭缓存功能。
之前网站服务器太慢,所以开启了缓存功能来加速网站访问。
第三步:网站启用流量限制

第四步:大部份流量来自国外,也就是国外的一些AI在疯狂抓取,用网站训练模型。也有一些是来自海外的攻击。
所以在防火墙中禁止国外IP。
第五步:为了解决缓存写入文件的问题。网站改成使用Redis缓存。
以下是具体的安装和配置步骤:
第一步:在宝塔中安装 Redis 服务
登录宝塔面板,点击左侧菜单的 「软件商店」。
在应用搜索框中输入 Redis。
在搜索结果中找到 Redis(通常在“运行环境”分类下),点击右侧的 「安装」。
弹出安装提示时,选择 「急速安装」 即可,大约需要 1~2 分钟。
第二步:为你的 PHP 安装 Redis 扩展(至关重要)
光安装了 Redis 服务还不够,你必须让你的网站语言(PHP)能够和 Redis 通信。
依然在 「软件商店」 中,切换到 「已安装」 标签页。
找到你网站正在使用的 PHP 版本(如果不确定是哪个版本,可以去网站设置里的“PHP版本”查看),点击它右侧的 「设置」。
在弹出的 PHP 管理窗口中,点击左侧的 「安装扩展」。
在右侧列表中找到 redis,点击它后面的 「安装」 并确认。
第三步:去网站后台/代码中切换驱动
当 Redis 服务和 PHP 扩展都安装好后,你需要告诉你的网站:“以后别往硬盘写缓存了,改用 Redis !”
// 缓存驱动配置 类型: Apcu,File,Memcache,Redis,Yac 可以在type中指定(指定时不区分大小写) 'caching' => array( 'status' => 1, // 默认状态为:1,表示启用数据缓存驱动。指定为0后每次从数据库中重新查询 'type' => 'Redis', // 缓存驱动类型(Apcu,File,Memcache,Redis,Yac) 'prefix' => 'cache_', // 缓存前缀
为什么这样做能彻底解决问题?
硬盘空间零占用: 所有的缓存数据都直接写入到服务器的 运行内存(RAM) 中。
自带过期销毁: 内存满了之后,Redis 会自动根据算法(如 LRU)把最老、最不常用的缓存直接抹去,永远不会发生像今天这样把系统塞爆挂掉的情况。
网站访问变快: 内存的读写速度比机械硬盘/固态硬盘快几十甚至上百倍,你的网站打开速度会有明显的提升。
限制 Redis 的最大内存设置
安装好redis之后,需要进行设置。
这台服务器是4G内存,所以我们使用512M,如果内存更小,可修改为256M.

网站缓存通常是一些文本数据,256MB ~ 512MB 的内存空间已经可以存下海量的缓存了,绝对够用。
在宝塔面板中,进入 「软件商店」 -> 「已安装」。
找到 Redis,点击 「设置」。
在弹出的窗口中,点击左侧的 「性能调整」。
找到 maxmemory(最大内存限制) 这一项:
将其修改为 268435456(代表 256MB)或者 536870912(代表 512MB)。
找到 maxmemory-policy(内存保留策略) 这一项:
默认通常是 noeviction(内存满了直接报错),务必把它改成 allkeys-lru。
allkeys-lru 的意思是:当内存达到你设定的 256M/512M 上限时,Redis 会自动删掉最久没被访问过的旧缓存,腾出地方给新缓存。这样循环往复,内存永远不会爆!
修改完成后,点击 「保存」。
回到你截图的这个「性能调整」页面,点击绿色的 「保存」 按钮,然后点击它右边的 「重启服务」 按钮,让配置正式生效。
下一篇: