Oracle 免费服务器保活指南:用 fogforest/lookbusy 一键防回收

Oracle 免费服务器保活指南:用 fogforest/lookbusy 一键防回收

免费的东西,往往暗藏一把"回收之剑"。Oracle Cloud 的 Always Free 实例如果太闲,连续 7 天 CPU、内存、网络占用都低于 20%,就可能被官方判定为"闲置"而直接回收。与其提心吊胆,不如主动让机器"忙"一点——一个 docker 容器就能搞定。

很多用过 Oracle Cloud 免费层的老用户都有过这种经历:某天登不上服务器了,控制台一看,实例显示"已回收"(Reclaimed)。原因很简单——你的机器太"闲"了。免费额度是白嫖的,但 Oracle 想把这些闲置的算力留给真正用的人,于是设置了这条"保活线":

  • CPU 利用率(95 分位)连续 7 天低于 20%
  • 内存利用率连续 7 天低于 20%
  • 网络利用率连续 7 天低于 20%

三个条件同时满足,实例就会被判定为闲置。也就是说,只要你在 CPU、内存、网络里"占"住其中一两项,就能避免被回收。最省心的办法,就是跑一个保活容器,让机器稳定地"忙"起来。

一、fogforest/lookbusy 是什么

fogforest/lookbusy 是一个专为 Oracle 免费服务器"保活防回收"设计的 docker 镜像,基于 Debian 11 构建,同时兼容 x86 和 ARM 架构。它能在容器里制造可控的 CPU、内存、网络占用,让实例的使用率稳稳超过 Oracle 的"闲置阈值"。

相比于其他保活脚本,它的优势很明显:

  • 占用可控:CPU 可以设成固定值,也可以设成一个区间(如 10%–20%)让占用自然浮动,更像真实负载。
  • 一键部署:一条 docker run 命令即可,无需编译、无需写 systemd 服务。
  • 不污染系统:所有"伪负载"都跑在容器里,删掉容器即恢复原状。
  • 开箱即用:镜像直接推送在 Docker Hub,docker pull 即可。

项目源码与脚本说明见 GitHub(Fog-Forest/scripts,oracle-lookbusy 目录),本文直接使用其官方 Docker 镜像。

二、部署步骤(一条命令搞定)

1. 准备工作

  • 一台 Oracle Cloud Always Free 实例(Ampere ARM 或 AMD 均可)
  • 已安装 Docker(没有的话先装:curl -fsSL https://get.docker.com | sh
  • 使用 root 或具有 docker 权限的账号执行

2. 运行保活容器

在服务器上执行下面这条命令(即本文推荐的"保活模板"):

docker run -d \
  --name oci-keep \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -e CPU_UTIL=10-20 \
  -e MEM_UTIL=20 \
  -e SPEEDTEST_INTERVAL=60 \
  fogforest/lookbusy

参数逐条解释:

参数 含义
--name oci-keep 给容器起名,方便管理
--restart=unless-stopped 服务器重启后自动拉起容器,除非你手动停止
-e TZ=Asia/Shanghai 设置时区,方便看日志
-e CPU_UTIL=10-20 CPU 占用 10%–20%(区间,让占用自然浮动)
-e MEM_UTIL=20 内存占用 20%
-e SPEEDTEST_INTERVAL=60 每 60 分钟做一次网络测速,制造网络流量
fogforest/lookbusy 镜像名

3. 验证是否生效

运行后等一两分钟,用以下命令观察资源占用:

# 查看容器是否在运行
docker ps | grep oci-keep

# 查看容器实时资源占用
docker stats oci-keep

如果你看到 CPU 在 10%–20% 上下浮动、内存占用约 20%,说明保活已经生效。还可以用 tophtop 看整机负载,确认占用落在 Oracle 阈值之上。

三、参数详解:怎么调更合理

fogforest/lookbusy 的几个环境变量很关键,用对了既不浪费资源、又能稳稳保活。

CPU_UTIL:CPU 占用

  • 支持固定值(如 -e CPU_UTIL=15)或区间(如 -e CPU_UTIL=10-20)。
  • 建议用区间,让占用在阈值上下自然波动,比恒定的 20% 更像真实业务,也更不容易被"盯上"。
  • 注意:Oracle 判定用的是 95 分位,也就是"大多数时间"的占用。只要大部分时间高于 20% 就安全,偶尔掉下去没关系。

CPU_CORE:占用核心数

  • 不指定时默认跑满所有核心。
  • 如果你的实例核心较多,或担心 CPU 打满影响正常业务,可以指定为 1 核:-e CPU_CORE=1
  • 用一个小核心占位 + 区间浮动,是兼顾"保活"与"可用"的常见做法。

MEM_UTIL:内存占用

  • 单位是百分比,如 -e MEM_UTIL=20
  • 注意:Oracle 的内存闲置判定只针对 A1(ARM) 规格。如果担心被打到,就在 A1 实例上给足内存占用。

SPEEDTEST_INTERVAL:网络测速间隔

  • 单位是分钟,如 -e SPEEDTEST_INTERVAL=60 表示每 60 分钟测速一次,制造网络流量。
  • 网络是三项指标里最省心的一项,因为保活容器本身产生的请求通常已够用;但如果实例太闲,可以把这个值调小(如 30)。
  • 如果不想跑网络占用,可以省略这个变量。

组合建议

场景 推荐配置
常规 ARM 实例 CPU_UTIL=10-20 + MEM_UTIL=20 + SPEEDTEST_INTERVAL=60
担心 CPU 打满影响业务 追加 CPU_CORE=1
小内存实例 降低 MEM_UTIL,如 MEM_UTIL=15

四、避坑要点与注意事项

部署很简单,但有几个坑容易踩,提前知道能少走弯路。

1. 别把占用调太高

保活是为了"不被回收",不是"烧死机器"。把 CPU_UTIL 调到 80%–100%,会让整台机器卡顿、网页打开慢,还可能影响你跑在里面的其他服务。控制在 10%–20% 区间即可,刚好越过阈值、又留足性能余量。

2. 正确看待 Oracle 的"20%"阈值

Oracle 官方文档多次调整过闲置判定的具体数值(早期是 15%,后来是 20%)。建议留一点安全边际——不要卡着 20% 用,设到 20%–30% 更稳妥。毕竟"回收"一次不可逆,宁可多占用一点点,也不要冒险。

3. 记得加 --restart

不加 --restart=unless-stopped 的话,服务器一旦重启,保活容器不会自动恢复,而你很可能没注意到——结果就是实例默默"变闲",被回收的风险随之上升。这个参数一定要加。

4. 内存占用 vs. 实际业务

MEM_UTIL 让容器占住内存后,这部分内存不会还给系统,直到你停掉容器。所以如果你的实例内存本来就很紧张、还有别的业务在跑,别把内存占用设太大,避免挤占真实应用的资源。

5. 定期检查,别一劳永逸

容器能帮你省心,但建议隔三差五看一眼:

docker ps | grep oci-keep     # 确认容器还在
docker stats oci-keep         # 确认占用正常

一旦容器被意外停止(比如磁盘满、OOM、手动误删),尽快重新拉起。保活是"长期维护",不是"部署完就完事"。

6. 不想用 docker?有备选方案

如果你机器上不方便跑 docker,也可以直接用 lookbusy 二进制或系统脚本。lookbusy 原生命令支持更细粒度控制,例如:

lookbusy -c 5-20 -r curve        # CPU 在 5%–20% 区间浮动
lookbusy -c 0 -m 128MB -M 1000   # 每 1000ms 循环分配/释放 128MB 内存

不过对绝大多数人来说,docker 方案最省心、最干净,删掉容器就完全恢复原状,不会污染系统。

五、小结

Oracle 免费服务器的"回收之剑"随时可能落下,但只要让实例保持"忙碌",就能稳稳保住这份白嫖的算力。fogforest/lookbusy 用一个轻量容器,把 CPU、内存、网络占用都控制得恰到好处:

  1. 一条 docker run 命令完成部署;
  2. CPU_UTIL=10-20 让 CPU 自然浮动;
  3. MEM_UTIL=20 占住内存、SPEEDTEST_INTERVAL=60 制造流量;
  4. 加上 --restart=unless-stopped,服务器重启也能自动拉起;
  5. 平时用 docker stats 定期检查,保持长期在线。

最后提醒一句:这类"制造占用"的行为,本质是为了规避 Oracle 对闲置资源的回收规则。是否采用、占用多少,请根据你自己的实际需求和使用协议来判断——毕竟稳定、可用的服务,永远比"卡着阈值投机"更值得长期依赖。

posted @ 2026-08-19 01:07  corysoft  阅读(2)  评论(0)    收藏  举报