迁移到云服务器后 CMS 反而变慢,九成不是云服务器“算力不够”,而是三类问题:实例配置被降档(尤其是突发性能实例的 CPU 积分耗尽)、系统盘和数据盘从本地盘换成低 IOPS 云盘、旧机器上的缓存与数据库参数没有跟着迁移。按“先量化基线 → 核对实例与磁盘 → 重算数据库和 PHP 参数 → 查网络与缓存”这四步走,通常半小时内就能把问题锁定在某一层。
迁移后第一步该测什么,才能判断哪一层变慢?
结论:先用三个数字把问题分段——连接耗时、首字节时间(TTFB)、总耗时,三者能直接把问题归到网络、PHP 执行还是数据库。
在服务器本机和外网各跑一次:
curl -o /dev/null -s -w "connect:%{time_connect} ttfb:%{time_starttransfer} total:%{time_total}\n" https://你的域名/
- connect 高、ttfb 低 → DNS 解析或 TLS 握手问题,看解析 TTL 和是否跨地域回源。
- ttfb 高 → 后端执行慢,继续往下查 PHP 与数据库。
- 同时打开 MySQL 慢查询:
slow_query_log=ON、long_query_time=1、log_queries_not_using_indexes=ON;PHP-FPM 打开 request_slowlog_timeout = 5s 与 slowlog。压测用 wrk -t4 -c50 -d30s 你的URL,记录迁移前后的 QPS 与 P99,没有这组对比数据,后面所有“感觉变慢”都无法验证。
云服务器配置是不是被降档了?
结论:核数不等于性能,突发性能实例(如 t5/t6 系列)在 CPU 积分耗尽后会掉到基准性能,这是迁云后变慢最容易被忽略的原因。
核对四项:lscpu 看主频与核数,free -m 看实际可用内存,云控制台看实例规格族是否为共享型,以及监控里的“CPU 积分余额”。基准性能常见为 10%–20%,也就是说 2 核突发实例在积分用尽后实际只有 0.2–0.4 核的持续算力,CMS 后台生成栏目页、批量导入时必然卡死。
另外核对 swap:云主机默认常不开 swap,内存为 2GB 而 MySQL 加 PHP-FPM 峰值超限时会触发 OOM Killer,表现为“随机 502”。用 dmesg | grep -i oom 确认。
磁盘 IOPS 不足怎么确认?
结论:CMS 是典型的小文件高并发随机读写场景,云盘 IOPS 低于原本地 SSD 时,页面加载会被拖到秒级。
两步验证:iostat -x 1 看 %util、await、r/s+w/s 之和;fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=30 --iodepth=32 测 4K 随机读实际 IOPS。
对照云盘规格:普通云盘 IOPS 在数百量级,高效云盘 3000–5000,SSD 云盘 25000,ESSD PL1 为 50000 且随容量线性增长。若 await 超过 20ms 且 %util 长期接近 100%,就是磁盘瓶颈。处理办法:MySQL 数据盘单独挂 ESSD PL1 以上;innodb_flush_method=O_DIRECT;CMS 的 cache、session、上传目录迁到对象存储或独立数据盘,避免与系统盘抢 IOPS。
数据库和 PHP 参数为什么要重算而不是照搬?
结论:参数是跟着内存走的,云主机内存变小而参数照搬旧机,等于让 MySQL 在极小缓存下跑全量物理读。
关键项:innodb_buffer_pool_size 默认仅 128MB,应设为可用内存的 50%–70%;innodb_io_capacity 需按云盘 IOPS 设置(ESSD PL1 可设 2000);max_connections 按实际并发设,过大只会加剧内存争抢。
PHP 侧:确认 opcache 已启用,opcache.memory_consumption=128(MB)、opcache.validate_timestamps=0(生产环境配合发布时 reload);pm.max_children 按“可用内存 ÷ 单进程 40MB”估算,2GB 内存配 30–40 个即可,超过会引发 swap 与 OOM。
网络链路和缓存层还要查哪几项?
结论:把“本机 127.0.0.1 连数据库”改成跨可用区甚至公网访问,是迁云后延迟从 0.1ms 涨到 10ms 以上的直接原因。
逐项确认:数据库与 Web 是否同地域同 VPC 并使用内网地址;安全组是否放行了内网端口;Redis/Memcached 是否随迁,连不上时会静默回退到数据库;CDN 是否因域名切换导致缓存全空、回源率 100%,上线前先预热首页和栏目页;DNS 解析 TTL 是否仍为 600 秒以上,导致切回困难。
排查完怎么固化结论
按上述顺序记录每一步的数值:TTFB、QPS、4K 随机 IOPS、innodb_buffer_pool_size 实际值、慢查询条数。迁移前后各留一份基线,后续再出现性能回退,直接比对即可定位到具体一层。真正决定迁云成败的不是买多大的实例,而是磁盘类型、参数重算和链路拓扑这三件事是否跟着一起迁过来。