加油
努力

腾讯云服务器偶尔卡顿,但监控显示负载不高,如何排查?

腾讯云服务器偶尔卡顿但监控(如 CPU、内存、平均负载)显示正常,这是典型的「表层指标掩盖深层瓶颈」问题。需系统性排查,不能只看 top/htop 或云监控的默认指标。以下是结构化、可落地的排查步骤(含腾讯云特有注意事项):


🔍 一、优先排除「云平台侧」干扰(腾讯云特有)

  1. 检查云监控中的隐藏指标

    • 登录 腾讯云控制台 → 云服务器 CVM → 监控与告警
    • 重点查看(默认不显示,需手动勾选):
      CPU Steal Time(窃取时间)→ 若持续 >5%,说明宿主机资源争抢严重(常见于共享型实例或同宿主机其他客户负载高)
      Disk I/O Wait(IOWait)→ 高值但 CPU 使用率低?说明磁盘是瓶颈(尤其使用高性能云硬盘但未开启 iothread 或队列深度不足)
      Network Packet Loss / Retransmit Rate(网络重传率)→ 突发丢包会导致应用响应卡顿(如数据库连接超时、HTTP 请求 hang)
      CVM 实例健康状态(控制台右上角“健康检查”)→ 是否存在底层硬件故障预警?
  2. 确认实例类型与规格匹配度

    • ❗ 共享型实例(S系列)严禁用于生产环境:其 CPU 资源受“CPU 积分”和“突发性能”限制,积分耗尽后强制降频(监控显示 CPU 利用率低,但实际频率可能仅 1GHz)。
      → ✅ 改用 标准型 S5/S6/S7 或计算型 C6/C7(独占 CPU 核心)
    • 检查是否开启 CPU 超线程(HT):某些场景(如高并发数据库)关闭 HT 反而更稳定(需重启生效)。

⚙️ 二、深入系统层排查(Linux 常用命令组合)

✅ 在卡顿时立即执行(不要等事后查日志!)

场景 命令 关键线索
瞬时卡顿定位 vmstat 1 5 r(运行队列) > CPU核数?b(阻塞进程) >0?wa(IOWait) 骤升?
磁盘 I/O 瓶颈 iostat -x 1 3 await >50ms、%util >90%、r_await/w_await 失衡 → SSD 性能不足或 RAID 配置错误;avgqu-sz 过大 → IO 队列堆积
进程级 IO 占用 iotop -oP 找出 IO> 列最高的进程(如 mysqld、rsync、logrotate)
内存压力(非OOM) cat /proc/meminfo | grep -E "Active|Inactive|Swap"
slabtop -o
Slab 内存过高(>2GB)→ 内核对象泄漏(如大量 inode/dentry);Inactive(file) 低 → 文件缓存被频繁回收
中断/软中断瓶颈 sar -I SUM 1 3 HI/s(硬中断) 或 SI/s(软中断) >1000 → 网卡/磁盘驱动异常(如网卡 RSS 队列不均)
网络连接异常 ss -s + netstat -s | grep -i "retransmit|drop" retransmits 激增 → 网络拥塞或 TCP 参数不合理;packet receive errors → 网卡丢包

💡 腾讯云特别提示

  • 若使用 VPC 内网通信,检查是否启用 VPC 流量镜像 抓包分析(避免 tcpdump 影响性能)
  • 高并发场景下,检查 /proc/sys/net/core/somaxconn(建议 ≥65535)和 net.ipv4.tcp_tw_reuse=1

🐞 三、应用与服务层关键检查

  1. 数据库类服务(MySQL/PostgreSQL)

    • 检查慢查询日志:SHOW PROCESSLIST; + SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND!='Sleep' AND TIME>10;
    • 腾讯云 CDB 用户:直接查看 CDB 控制台 → 慢日志分析
    • 检查 innodb_buffer_pool_size 是否过小(导致频繁磁盘读)
  2. Web 服务(Nginx/Apache)

    • nginx -T | grep "worker_connections" → 是否达到连接上限?
    • 检查 ulimit -n(文件描述符)是否足够(建议 ≥65535)
    • 查看 error.logupstream timed out → 后端服务响应慢
  3. 定时任务干扰

    • crontab -l + ls /etc/cron.* → 是否有 logrotateupdatedbyum-cron 在业务高峰运行?
    • ✅ 解决方案:systemctl disable mlocate-updatedb 或调整 cron 时间

🛠 四、腾讯云专属工具与支持

  1. 使用腾讯云诊断工具
    • 在 CVM 控制台 → 实例详情页 → 「诊断」标签页 → 运行「性能诊断」(自动检测 CPU Steal、磁盘延迟、网络丢包等)
  2. 提交工单时必备信息(提速解决):
    • 卡顿发生的具体时间(精确到分钟,UTC+8)
    • 实例 ID + 地域(如 ap-guangzhou
    • sar -u -r -d -n DEV 1 60 的完整输出(卡顿前后 5 分钟数据)
    • dmesg -T | tail -50(检查内核 OOM 或硬件报错)

✅ 快速自检清单(5分钟完成)

检查项 命令/操作 正常值 异常表现
CPU Steal top → 看 %st <1% >5% → 宿主机争抢
磁盘延迟 iostat -x 1await SSD <10ms, HDD <30ms >50ms 持续存在
网络重传 netstat -s | grep -i retransmit 每小时 <100次 突增至数千次
进程阻塞 ps auxf | head -20 STAT 列无 D(不可中断)状态 大量 D 状态进程
内存碎片 cat /proc/buddyinfo order-9 以上页面 >0 order-10 为 0 → 内存碎片化

📌 最后建议

  • 立即行动:在下次卡顿时,用 screentmux 后台运行 sar -A 1 > /tmp/sar.log & 持续记录,避免错过瞬态问题。
  • 架构优化:若确认是共享型实例或磁盘性能瓶颈,升级实例规格 + 更换为云硬盘(CBS)SSD 并开启 multi-queue 是最有效方案(腾讯云 SSD 云硬盘 IOPS 可达 24000,远超普通云硬盘)。
  • 长期监控:部署 Prometheus + Grafana(腾讯云提供托管版 TKE Prometheus),自定义告警规则(如 rate(node_cpu_seconds_total{mode="steal"}[5m]) > 0.03)。

如按上述步骤仍无法定位,可提供具体现象(如“卡顿时 SSH 登录延迟 10s” / “MySQL 查询从 50ms 突增至 5s”),我可进一步给出针对性命令。

需要我帮你写一个 自动化排查脚本(一键收集所有关键指标并生成报告)或 腾讯云监控告警配置模板,随时告诉我 👇

云服务器