ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

免费云服务器防扣费指南:计费模型、安全加固与到期退场

免费云服务器防扣费指南:计费模型、安全加固与到期退场

1. 免费云服务器的五种"免费",先分清楚你领的是哪一种

免费云服务器这个词,踩过坑的人都知道它有多"薛定谔"——宣传页上写着零成本,账单出来那一刻才发现,机器是免费的,流量不是,快照不是,公网地址也不是。我第一次领的时候也天真过,以为点个"立即领取"就完事,结果第二个月收到一笔几十块的扣款通知,翻账单翻了半小时才定位到是系统盘扩容后的按量计费。从那以后我养成了一个习惯:任何免费资源,先看计费文档再看配置页。

这篇内容适合两类人:一类是刚接触云服务、想拿免费机器练手学 Linux 或搭个小站的新手;另一类是已经用过一阵子,但对自己账单构成始终说不清楚、心里没底的人。下面我会把"免费"这件事拆成五类形态、三道申请坎、一小时的配置动作、四道防扣费闸门,以及免费机的能力边界,全部讲透。所有平台差异我会用"某云厂商""主流平台"这类泛称,因为各家的规则大方向一致,细节数值请以你实际注册平台的当期文档为准——这点很重要,免费政策变动非常频繁。

1.1 试用型、计划型、永久小规格、代金券、函数额度的本质差别

云厂商嘴里的"免费",底层逻辑其实只有五种,搞混了就会做出错误预期。

试用型免费是最常见的,通常面向新注册账号,给一到三个月不等的使用期,规格一般不低(2核4G 起步很常见)。它的本质是获客成本,到期后不会自动关机,而是转成按量付费或按原价包月。这是扣费第一大来源,后面会专门讲怎么防。

计划型免费指的是学生计划、开发者扶持计划这类,需要额外资质认证,周期往往按年续期,规格偏低但胜在稳定。它的坑在于"资格是动态的",你可能某次没按时完成续期认证,机器就悄悄转成付费了。

永久免费小规格是很多人最想要的,但现实是这类资源通常限定地域、限定规格(1核1G 或 1核2G 居多)、限定月流量,而且往往是"突发性能实例",CPU 有积分机制。它不是不能用,而是不能当生产环境用,后面第六章会详细说积分耗尽之后的惨状。

代金券与资源包严格说不算服务器,是抵扣凭证。代金券有有效期、有适用范围(有的只能抵新购不能抵扣按量),资源包一般绑定具体产品。常见误解是"我账户里有 500 元代金券所以随便开",结果开了一台代金券不覆盖的实例规格,钱照扣。

函数计算与容器额度属于 Serverless 形态,按月给一定的调用次数和计算时长。它真正的坑不在钱,而在于"额度用完直接拒绝服务",你的接口会在某天凌晨突然全部报错,而不是产生账单——排查时容易往代码方向找,其实是额度耗尽。

1.2 三个最容易被忽略的额度维度:时长、规格、流量

大部分人看免费政策只盯"多久"和"几核几G",但真正决定你会不会掏钱的是第三个维度:流量与带宽。

维度典型形态容易踩的坑
时长1-3 个月试用 / 按年续期的计划 / 长期小规格到期自动转付费,无短信提醒或提醒被忽略
规格1核2G、2核4G、突发性能型超出规格的部分(磁盘、内存)单独计费
流量每月固定 GB 数 或 固定带宽 Mbps超出按量单价计费,且单价往往是包月的数倍
地域仅限特定区域跨区访问产生额外流量费,快照跨区复制收费
数量限 1 台 / 限 2 台多开一台直接全价

我见过最典型的误判是把"1Mbps 带宽"理解成"随便用"。算一笔账:1Mbps 约等于 128KB/s,满速跑满一个月理论上是 128 × 86400 × 30 ≈ 331GB,实际由于 TCP 开销和空闲,能跑到 250GB 左右就不错了。如果你的免费套餐写的是"每月 200GB 流量、超出按量计费",那么这台机器一旦被人刷了图片或者跑了下载,超额部分就是真金白银。这也是为什么我一直建议:免费机的公网入口能不放就不放,必须放的话前面加一层缓存或限流。

另一个容易被忽略的是"数量维度"。很多活动的免费额度是按"账号"算而不是按"地域"算,你在 A 地域开了一台免费机,再去 B 地域开第二台,第二台就是全价。开之前先在控制台的费用中心确认一下自己名下有几台在享受优惠。

2. 申请那一步就开始埋雷:账号、绑卡与库存

很多人以为坑是从配置开始的,其实从注册那一刻就埋下了。我帮人看过不少"莫名其妙被扣费"的案例,追根溯源都是申请环节没搞清楚规则。这一章讲三件事:账号资质、绑卡预授权、以及领取入口的现实问题。

2.1 实名认证与账号权重

主流平台现在基本都要求实名才能开资源,这是硬性门槛。但很多人不知道的是,账号本身是有"权重"概念的:新账号、无消费记录账号、异地登录频繁的账号,在领取免费资源时更容易触发风控,表现为"领取按钮点不动""提示当前活动名额已满""需要人工审核"。

我自己的经验是:注册后先完成实名、绑定一个常用手机号、不要在同一天内频繁切换网络环境登录,然后把账号放一两天再回来领,成功率明显比"注册完立刻抢"要高。这不是玄学,风控系统对新账号的评估需要一点行为数据。

另外要注意账号与账号之间的关联。同一身份证、同一手机号、同一支付方式关联的多个账号,通常被视为同一主体,免费额度不叠加。有人想用家人的信息再注册一个来多领一台,这在规则上大概率是违规的,而且一旦被判定为批量注册,已有的免费资源也可能被回收,得不偿失。

2.2 绑卡预授权为什么会先扣一笔

这是咨询量最高的一个问题:"我领的是免费机器,为什么绑卡时被扣了一笔钱?"

绝大多数情况是预授权,不是真实扣款。平台为了验证支付方式有效性,会发起一笔小额授权(常见 1 元上下或者按当地货币的最小单位),这笔钱会在几天到两周内自动解冻退回。你可以在账单的"授权/冻结"明细里看到它,状态一般是"处理中"或"已解冻"。真正的扣费会出现在"消费明细"里,两者要分清。

但预授权之外还有一种情况需要警惕:部分平台的免费套餐要求"先付费后返"或者"押金模式",也就是先按正常价格扣费,满足条件后在次月以代金券形式返还。这种模式的坑在于,如果你在中途改了配置、或者提前释放了实例,返还条件就不满足了。所以我的一般做法是:绑卡前把活动规则页从头到尾读一遍,重点找"返还""抵扣""有效期""变更后是否仍享受"这几个关键词。

还有一种更隐蔽的:绑卡时勾选了某个"自动续费享折扣"的协议。这个勾选框往往在页面角落,字号很小。它不影响你当下免费,但会在免费期结束时自动帮你续上一年。第二章讲防扣费时会给出具体的关闭路径思路。

2.3 领取入口、地域与库存的现实问题

免费资源不是无限供应的。热门地域(一线城市的机房)的免费库存经常是零,你点进去看到的是"暂无可领取资源"。这时候有两个选择:换一个冷门地域,或者等每天固定时段补库存。

换地域要考虑代价:冷门地域到你这边的网络延迟可能高出一截;如果你打算搭个对外的站点,访问体验会受影响。我的建议是先测延迟再决定,别为了抢免费名额把自己放到一个 200ms 起步的节点上。

还有一个实际操作层面的细节:领取页面和购买页面经常是两个入口,界面长得几乎一样,但一个是 0 元订单一个是正常计费订单。我见过有人手滑在购买页选了同样的规格,因为页面默认勾选了三年的时长,一提交就是一笔不小的支出。下单前一定要看订单确认页的总价是不是 0,以及计费模式写的是"包年包月(优惠)"还是"按量付费"。这两栏对不上,就退回去重来。

3. 开机后的第一小时:把最小可用且安全的环境搭起来

机器开出来之后,第一小时做什么,直接决定了你后面是省心还是天天救火。我的固定动作是四步:选镜像、换登录方式、收安全组、跑基础脚本。这套流程十来分钟能走完,但能挡掉后续八成的麻烦。

3.1 镜像选择:为什么我不建议新手直接上带面板的镜像

控制台提供的镜像大致分三类:纯净系统镜像(各种 Linux 发行版、Windows Server)、应用镜像(预装了运行环境)、以及带可视化面板的镜像。

新手容易被"一键部署、面板管理"吸引,但从安全和成本两个角度看,我都不推荐在免费机上用带面板的镜像。原因有三:面板本身会常驻占用内存(1核1G 的机器上,一个面板吃掉两三百兆很常见,剩下的内存跑不了什么);面板的默认端口是公开已知的,等于给扫描器指了路;面板自身的版本更新如果跟不上,反而是个稳定的攻击面。

我的选择是Debian 或 Ubuntu 的 LTS 精简版,原因很实在:软件源稳定、社区文档多、出问题好搜。CentOS 系现在分支比较乱,新手容易在源配置上卡住。Windows Server 除非你要跑特定的桌面程序,否则在 1核2G 的免费机上体验极差,光系统本身就能把内存吃满。

系统盘大小也要看一眼。免费套餐常常只给 20-40GB 系统盘,而某些镜像默认就要 40GB 起步,选完镜像后系统盘会被自动扩容到更大值,这部分差额是收费的。下单页面上"系统盘 40GB"这一行,如果不在免费额度内,改成最小可用值。

3.2 密钥登录与 SSH 加固的实际操作

密码登录 + 默认 22 端口,是免费机被爆破的标准配置。免费机因为 IP 段集中、防护等级低,是扫描器的重点目标。我见过一台开机不到 24 小时、日志里几万条失败登录记录的。

正确的做法是:创建实例时选择密钥对登录,或者开机后立刻把自己的公钥写进~/.ssh/authorized_keys,然后关掉密码登录。具体操作:

# 本地生成密钥对(如果没有) ssh-keygen -t ed25519 -C "free-server" -f ~/.ssh/free_server # 把公钥内容复制到服务器 ssh-copy-id -i ~/.ssh/free_server.pub user@your-ip

登录成功后再改配置,注意先确认密钥能登上,再关密码,顺序反了就把自己锁外面了:

sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config sudo sshd -t # 先校验配置语法,别直接重启 sudo systemctl restart sshd

sshd -t这一步千万别省。我吃过一次亏:改配置时手滑多打了个字符,直接restart,服务起不来,控制台的 VNC 又卡得要命,最后是靠救援模式进去改回来的,前后折腾四十分钟。有这个校验命令,一秒钟就能发现问题。

如果确实需要保留密码登录(比如临时给朋友用),至少做两件事:改 SSH 端口到非 22、装个 fail2ban 做失败次数封禁。改端口只是降低噪音,不是安全措施,真正起作用的是密钥 + 封禁。

3.3 安全组只放必要端口

安全组是云上的第一道墙,规则写宽了等于没有墙。免费机上常见的错误是"图省事直接放行全部端口"或者"入方向 0.0.0.0/0 全开",然后忘了这回事。

我的原则是默认全拒,按需白名单。一张表说清楚哪些端口该开:

端口用途建议来源
22(或自定义)SSH 管理仅自己的固定公网 IP,不要 0.0.0.0/0
80 / 443Web 服务0.0.0.0/0(必须对外时)
3306 / 6379 / 27017数据库绝不对外,只允许同内网
8080 / 3000 等应用调试仅自己 IP,调试完关掉
全部—默认拒绝

数据库端口暴露在公网是极其常见的事故来源。免费机如果只跑自己的练手项目,数据库和本机应用通信走127.0.0.1就够了,根本不需要开公网端口。有人为了方便用图形工具连数据库,把 3306 全量放行,几天后数据被清空的情况我见过不止一次。

在服务器内部再补一层主机防火墙,形成双保险:

sudo apt update && sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow from 你的固定IP to any port 22 proto tcp sudo ufw allow 80,443/tcp sudo ufw --force enable sudo ufw status verbose

注意ufw allow from ...那条,务必先加白名单再 enable,否则 SSH 会断。云控制台的安全组和主机防火墙是两套东西,两边规则不一致时以更严格的为准,这也是排查"端口明明开了却连不上"的第一检查点。

3.4 一套十分钟跑完的基础环境脚本

新机初始化我固定跑这么一段,作用是补齐常用工具、开时间同步、限制日志膨胀、开自动安全更新:

#!/usr/bin/env bash set -euo pipefail # 1. 基础工具 sudo apt update sudo apt install -y curl wget git vim htop tmux unzip jq fail2ban # 2. 时区与时间同步(很多人忽略,日志时间对不上排查很痛苦) sudo timedatectl set-timezone Asia/Shanghai sudo timedatectl set-ntp true # 3. 日志限制,防止把系统盘写满 sudo sed -i 's/^#\?SystemMaxUse=.*/SystemMaxUse=200M/' /etc/systemd/journald.conf sudo systemctl restart systemd-journald # 4. 自动安全更新 sudo apt install -y unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades # 5. fail2ban 默认规则启用 sshd sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd

磁盘写满是免费机上最高频的故障之一,而且症状很迷惑:SSH 能登,但任何写操作都失败,网站报 500,数据库直接挂。原因通常是日志或者临时文件撑爆了 20GB 的小盘。所以上面第 3 步的限制很有必要,另外每月定期看一眼:

df -h # 容量 df -i # inode,小文件多的时候 inode 先满 du -sh /var/log/* | sort -rh | head -10

df -i这一条尤其容易被漏掉。有些场景磁盘还剩十几个 G,但 inode 用满了,照样写不进去,这时df -h看着很健康,人会往别处找原因,白白浪费半天。

4. 钱到底是从哪流走的:计费模型逐项拆解

这一章是整篇的核心。免费机扣费从来不是"机器开始收费了"这么简单,绝大多数是小额、分散、不易察觉的资源在同时计费。我把它们分成三类:计算、网络、存储。

4.1 包年包月、按量付费、抢占式实例的适用边界

计费模式计费粒度停机是否收费适合场景
包年包月按周期预付是(资源为你保留)长期稳定运行、可预期的负载
按量付费按秒/小时取决于是否开启"节省停机模式",公网IP和云盘通常仍收费短期测试、临时压测
抢占式/竞价按秒,价格浮动是可中断的批处理任务

免费试用到期后,默认的转换方向往往是按量付费,这是最危险的一种。因为按量付费的单价看起来不高(比如每小时几毛),但它是 7×24 累积的,一个月下来可能是包月的两三倍。而且按量付费的实例,你即使在里面关机,只要没选择"节省停机模式",计算资源依然计费。

这里有个特别容易误解的点:在操作系统里执行shutdown和 在控制台执行"停止实例"是两回事。前者只是系统关机,云平台认为实例仍在运行;后者才是真正的停止操作。我见过有人习惯性sudo poweroff,以为不花钱了,实际账单照走。

所以我的做法是:免费期一结束,先确认计费模式,如果是按量付费,要么改成包月,要么直接释放。不要留着一台"先放着说不定以后用得上"的按量实例,它每个月都在安静地吃钱。

4.2 带宽与流量:两种计费方式差出好几倍

网络费用是免费机超额扣费的头号来源,而新手最容易在这里搞混两种模式。

固定带宽计费:你买 1Mbps 或 5Mbps,按月付固定费用,用不用都这个价,超出带宽峰值会被限速但不会额外扣钱。这种方式的特点是费用可预测、不会爆表。

按使用流量计费:不限制带宽峰值(或者峰值很高),但按实际流出的 GB 数收费。单价看起来便宜,问题是不可预测。网站被爬、图片被外链、视频被人转发,流量可以在几个小时内跑掉几百 GB。

按量流量的单价通常是包月带宽折算下来的数倍。举个粗略的量级对比:同样是每月 300GB 出流量,包月固定带宽的成本可能只是按量流量计费的三分之一到一半。所以只要你的负载是持续稳定的,固定带宽几乎总是更划算;反过来,如果你的流量是偶发峰值(比如每月只有几天有大批量访问),按量才合适。

免费套餐里通常给的是"每月 N GB 流量",本质是按量流量 + 免费额度。这意味着一旦超出,自动转成计费,没有二次确认。所以我给免费机的建议是二选一:要么把带宽设得很低(1Mbps)并接受慢,要么在前面套一层对象存储/CDN 把静态资源分流出去,减轻机器本身的出流量。后者虽然对象存储也要钱,但静态资源的单位成本远低于服务器出流量。

快速自查当前流量消耗:

# 实时看网卡累计流量(单位字节) cat /proc/net/dev # 或者用 vnstat 做按天统计 sudo apt install -y vnstat && sudo vnstat -d

vnstat装完之后跑一天就有数据了,能看到每天的出入流量趋势。发现某天流量异常飙升,第一时间查访问日志,看是爬虫、被刷还是配置错误导致的循环请求。

4.3 存储与快照这些"配角"的账单

计算和网络之外,还有一堆看起来不起眼、加起来不少的资源。

云盘:系统盘在免费额度内,但数据盘、扩容部分、以及高性能云盘(SSD/ESSD 类型)都是单独计费的。把系统盘从 40GB 扩到 100GB,多出来的 60GB 按月收费,这个费用很多人是看不到的,因为它混在"存储"类目里。

快照:按实际占用容量计费。自动快照策略如果开着且没设保留数量,会一直累积。我见过一个开了两年没管的账号,快照存了几百 GB。免费机上快照要手动管理,或者干脆用脚本把数据打包传到本地,别依赖云快照。

镜像与自定义镜像:自定义镜像本身可能收费,跨地域复制镜像更是按容量计费。

公网 IP / 弹性 IP:绑定在运行实例上通常免费或包含在内,但闲置的弹性 IP 是要收费的。这个设计逻辑是防止地址囤积,但对用户来说很反直觉——不用的东西反而收费。释放实例时记得一并释放 IP。

负载均衡、NAT 网关、日志服务、监控告警:这些增值服务大多有免费额度,超出后按量计费。免费机上基本用不到,但如果跟着某些"一键部署"模板创建出来了,就会持续产生小额费用。

4.4 一张隐性收费清单,建议对着自查

资源项免费额度内常见触发扣费的动作
实例规格指定规格升级 CPU/内存、变更机型
系统盘20-40GB选大镜像导致自动扩容
数据盘通常不含挂载新盘、扩容
快照少量或没有开启自动快照且不设保留数
公网带宽1Mbps 或固定流量调高带宽、流量超限
弹性 IP绑定状态免费解绑后未释放
对象存储少量存储+请求数静态资源外链、请求次数超限
日志与监控基础额度开启全量日志采集
备份服务通常不含开启数据库自动备份

对照这张表,去费用中心把每一项的当期用量和免费额度拉出来比一比,能立刻发现哪些在悄悄计费。这个动作我建议每月做一次,五分钟的事。

5. 防扣费的四道闸门:告警、续费、巡检、权限

前面讲的是"钱从哪来",这一章讲"怎么拦住"。我的做法是设四道闸门,从被动到主动依次是:预算告警、续费管理、定期巡检、权限与密钥管控。四道都设上,基本可以做到"即使出事也能第一时间知道"。

5.1 预算告警怎么设才有用

大多数平台的费用中心都有"预算"或"费用预警"功能,但默认配置往往很鸡肋——比如阈值设成 1000 元,你一个月才花 50,永远触发不了,等于没设。

有用的配置是这样的:设一个月度预算,金额设为你心理预期的上限(哪怕只有 20 元),然后在 50%、80%、100% 三个档位都开通知,通知方式至少勾选短信或邮件,别只勾站内信(站内信你不登录就看不见)。这样只要有一天突然产生了几块钱的非预期费用,当天就能收到提醒。

更细一层可以按产品维度拆分预算,比如单独给"网络"和"存储"设预算。因为这两类是超额扣费的高发区,分开设能更快定位。

还有一类告警容易被忽略:余额不足提醒。账户余额接近 0 的时候,按量资源可能被停服,但更麻烦的是有些平台会先扣费再通知,如果你绑了信用卡,可能会产生一笔预期外的扣款。余额提醒设置成"低于 50 元"就行。

5.2 自动续费与到期前的动作清单

自动续费这个开关,本质上是把决策权交给了平台。免费期结束时,它默认帮你续上,而续费价格通常是原价,不是活动价。

我的处理方式是:领到免费资源的第一天,就去把自动续费关掉,然后在日历里加一条到期前七天的提醒。关掉自动续费不会影响你当期使用,只是到期后不再自动扣钱。

到期前七天,按这个清单走一遍:

  1. 导出所有需要保留的数据(代码、数据库、配置文件、证书),打包下载到本地
  2. 确认没有正在运行的重要任务
  3. 检查是否有挂载的数据盘、弹性 IP、快照等附属资源
  4. 决定是续费、迁移还是释放
  5. 如果释放,先释放附属资源再释放实例(顺序反了可能产生残留计费)

第 5 条的顺序很多人不知道。先释放实例、后释放 IP 和云盘,往往会导致这些资源变成"无主"状态继续计费。正确顺序是先解绑再删除,最后确认资源列表里干干净净。

5.3 每周账单巡检看哪几个数

账单页面信息量很大,但真正需要每周看的就四个数:

  • 当期应付金额:和上周比,有没有非预期的增量
  • 按量付费明细:按产品分组,看哪个产品在产生费用
  • 资源实例列表:有没有你不认识的实例(尤其是按量付费的)
  • 代金券与资源包余额:什么时候过期,剩多少

第二个数最关键。我一般的排查路径是:先看总额有没有异常,有异常就按产品下钻,定位到具体产品后看用量曲线,用量曲线突然抬头的那一天去查操作日志(谁在什么时候改了什么)。这条路径基本能在十分钟内定位到根因。

如果发现账单里出现了自己完全没印象的产品,先别急着认为是平台出错,大概率是某个"一键部署"或者"创建实例时默认勾选"带出来的关联资源。

5.4 访问密钥泄露:最贵的一种"免费"

这一节我想单独拎出来讲,因为它的破坏力和其他坑不是一个量级。

云平台一般会提供访问密钥(API Key / AccessKey)用于程序调用。这对密钥的权限通常等同于账号本身。一旦泄露——比如你不小心提交到了公开的代码仓库、贴在了聊天群里、或者写在了前端代码里——攻击者可以在几分钟内用你的账号批量创建高配实例用于某些消耗性用途,几小时后你的账单可能是五位数。

这类事件的典型特征是:账单在几小时内暴涨、资源列表里出现大量你没创建过的实例、创建时间集中、地域分散。而且攻击者往往会同时创建多个账号下的资源、开启各种高配规格,就是为了在你反应过来之前最大化消耗。

防护措施很明确:

  • 不要在主账号上创建长期密钥,用子账号 + 最小权限
  • 密钥不要写进代码,用环境变量或者配置文件(并加入.gitignore)
  • 提交代码前跑一遍密钥扫描
  • 开启操作审计,异常创建操作能收到告警
  • 一旦怀疑泄露,立即禁用密钥、检查资源列表、提交工单
# 提交前的简易自查:搜常见密钥特征 grep -rnE "(AccessKey|SecretKey|api[_-]?key|token)\s*[:=]\s*['\"][A-Za-z0-9/+=]{16,}" . \ --include="*.py" --include="*.js" --include="*.yaml" --include="*.json"

这个 grep 只能兜住最粗心的情况,正经项目还是该上专门的密钥扫描工具,并且把.env之类文件提前写进.gitignore。

5.5 用脚本把巡检做成自动化

手动巡检容易忘,所以我写了个小脚本放在本地,每周一早上跑一次,把关键指标拉出来看一眼。这里贴个思路框架(各平台 API 不同,替换成对应 SDK 即可):

#!/usr/bin/env bash # 每周巡检提醒:磁盘、流量、到期时间、异常进程 set -uo pipefail HOST="your-server" REPORT="/tmp/weekly-check-$(date +%F).txt" { echo "=== 磁盘 ===" ssh "$HOST" "df -h / && df -i /" echo "=== 本月流量 ===" ssh "$HOST" "vnstat -m | tail -5" echo "=== 高占用进程 ===" ssh "$HOST" "ps aux --sort=-%cpu | head -8" echo "=== 异常外联(挖矿类常见特征) ===" ssh "$HOST" "ss -tunp | grep ESTAB | head -20" } > "$REPORT" 2>&1 grep -qiE "100%|No space" "$REPORT" && echo "警告:磁盘可能已满" echo "报告已生成:$REPORT"

脚本本身不复杂,价值在于把"想起来才查"变成"固定时间自动查"。磁盘满、CPU 被不明进程吃满、有异常外联,这三类是免费机上最常见的问题,一张报告全能看到。

6. 免费机的性能天花板与退场方式

最后一章聊聊预期管理。免费机不是缩水版的生产服务器,它是"够你练手和跑轻量服务"的资源,认清边界比优化技巧更重要。

6.1 CPU 积分耗尽后会发生什么

免费机大概率是突发性能实例,它的 CPU 不是"随时能跑满",而是有一个基准线(比如 20%)加积分池。平时负载低的时候攒积分,需要突发的时候消耗积分冲高。积分耗尽之后,CPU 会被硬限制在基准线,表现出来就是:机器没挂,SSH 能登,但所有操作慢得像 PPT,编译一个包能跑十分钟。

这个机制最坑的地方在于它没有明显报错。你看到的是"网站变慢了""接口超时了",本能反应是去查代码、查数据库,结果查半天发现是 CPU 被限了。所以在突发性能实例上,第一排查动作应该是看 CPU 使用率和积分余额,而不是翻代码。

避免的方法:把常驻的高 CPU 任务(编译、转码、爬虫、批量处理)挪到本地或者临时开一台按量实例跑完就释放;常驻服务控制在低负载水平;给关键任务加超时和重试,别让它卡死在那里耗积分。

6.2 适合跑什么,不适合跑什么

我把免费机的适用范围整理成了一张表,判断标准就两条:能不能容忍中断、会不会产生持续的公网流量。

用途是否适合原因
Linux 命令练习、环境搭建学习很适合中断了重开就行
个人笔记、静态博客适合流量小,可加缓存
轻量 API 练手、定时任务适合负载低
小型数据库(自己练习用)谨慎内存吃紧,别存重要数据
图片/文件下载站不适合流量费不可控
视频转码、持续高 CPU 任务不适合积分耗尽,性能断崖
对外正式服务不适合到期中断、无 SLA
存放唯一一份重要数据绝对不适合到期释放,数据不会保留

倒数第二条值得展开说。免费资源没有可用性承诺,平台可以因为维护、资源调整或者政策变更随时回收。把"唯一一份"的数据放在上面,等于把风险敞口开到最大。我见过有人把几年的照片库放在免费机上,到期忘了续,机器释放,数据全没。

6.3 到期前的数据迁移与资源清理

到期不是"关机"就完事,而是一套完整动作。我通常按这个顺序做:

  1. 打包数据:代码从 Git 拉,数据库导出 SQL,配置文件单独打包,证书别忘了
  2. 校验完整性:下载到本地后解压、算个校验和,确认没丢文件
  3. 迁移到新环境:如果换机器,先在新机器上把服务跑通,再下线旧的
  4. 清理资源:解绑弹性 IP → 删除快照 → 删除数据盘 → 释放实例
  5. 确认账单归零:第二天再看一眼费用中心,确认没有残留的按量计费
# 打包前的标准动作 mysqldump -u root -p --databases your_db > /tmp/backup.sql tar -czf /tmp/site-$(date +%F).tar.gz /var/www /etc/nginx /etc/ssl/private sha256sum /tmp/backup.sql /tmp/site-*.tar.gz # 传到本地 scp user@your-ip:/tmp/backup.sql ./

第 4 步的顺序再强调一次:先解绑、再删除。资源之间是有依赖关系的,实例还在的时候删 IP 可能删不掉,实例删了之后 IP 又变成闲置状态继续计费。清理完去资源列表确认一下,看到"全部资源为空"才算干净。


最后分享一个我自己在用的判断原则:任何免费资源,只要它需要绑支付方式、需要实名、需要定期手动维护,那它的真实成本就不只是钱,还包括你的注意力。所以我的做法是——免费机只做一件事,做完就释放,不要让它长期挂在那里成为一个你偶尔想起来、又不敢彻底关掉的包袱。真需要一个长期稳定的环境,选一台最便宜的包月小规格,把不确定的按量计费挡在外面,反而更省心。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进