如何用 AWS CLI 判断 T 系列实例 CPU 不够(实战指南)

在使用 AWS EC2 T 系列实例(如 t4g / t3)时,经常会遇到:

  • CPU 使用率很高

  • load 很高(> CPU 核数)

  • PostgreSQL / 应用变慢

  • 但又不确定是不是 CPU 不够

本文通过 AWS CLI + 系统指标,教你如何一步步证明:

👉 你的 CPU 不够(而且是被 CPU Credit 限制)

有个比较简单的方法

这里一直是0的话,说明额度一直是空的,也就是一直被消耗

可以是额度正好被消耗完,也可以是消耗 > 额度


一、T 系列 CPU 的本质(必须理解)

t4g.2xlarge 为例:

复制代码
8 vCPU,但 baseline 只有 40%

换算:

复制代码
8 × 40% = 3.2 vCPU(长期可用)

👉 也就是说:

这台 8核机器,长期性能 ≈ 3.2核


二、核心指标 1:CPUCreditBalance(最关键)

查询命令

复制代码
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUCreditBalance \
  --dimensions Name=InstanceId,Value=你的实例ID \
  --statistics Average \
  --period 60 \
  --start-time 2026-04-22T00:00:00Z \
  --end-time 2026-04-22T23:59:59Z

如何判断

数值 含义
> 100 CPU 有余量
持续下降 正在透支 CPU
≈ 0 ❗ CPU 已被限制

本次优化查询的数据

bash 复制代码
{
    "Label": "CPUCreditBalance",
    "Datapoints": [
        {
            "Timestamp": "2026-04-22T00:55:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T16:50:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T02:40:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T18:35:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T02:05:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T20:20:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T03:50:00+00:00",
            "Average": 0.0,
            "Unit": "Count"
        },
.........

关键结论

复制代码
CPUCreditBalance = 0

👉 表示:

CPU 已经不能再 burst,只能用 baseline(≈3.2核)


三、核心指标 2:CPUCreditUsage(算出真实 CPU 需求)

查询命令

复制代码
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUCreditUsage \
  --dimensions Name=InstanceId,Value=你的实例ID \
  --statistics Sum \
  --period 300 \
  --start-time 2026-04-22T00:00:00Z \
  --end-time 2026-04-22T23:59:59Z

如何计算真实 CPU

这个指标是:

复制代码
5分钟内消耗的 CPU credit

换算公式:

复制代码
CPU核数 ≈ credit / 5

示例

bash 复制代码
{
    "Label": "CPUCreditUsage",
    "Datapoints": [
        {
            "Timestamp": "2026-04-22T00:55:00+00:00",
            "Sum": 30.0007428,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T16:50:00+00:00",
            "Sum": 33.16712308333334,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T02:40:00+00:00",
            "Sum": 26.27567871666667,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T18:35:00+00:00",
            "Sum": 35.062843916666665,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T02:05:00+00:00",
            "Sum": 33.40315138333333,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T20:20:00+00:00",
            "Sum": 35.161372566666664,
            "Unit": "Count"
        },
        {
            "Timestamp": "2026-04-22T03:50:00+00:00",
            "Sum": 17.962388716666666,
            "Unit": "Count"
        },
........

如果看到:

复制代码
30 credit / 5分钟

那么:

复制代码
30 / 5 = 6 CPU

👉 说明:

业务需要 6 个真实 CPU


对比 baseline

复制代码
t4g.2xlarge baseline = 3.2 CPU
实际需求 ≈ 6 CPU

👉 差距:

复制代码
6 - 3.2 = 2.8 CPU(不足)

四、辅助指标 3:CPUUtilization(确认 CPU 打满)

查询命令

复制代码
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=你的实例ID \
  --statistics Average Maximum \
  --period 60 \
  --start-time 2026-04-22T00:00:00Z \
  --end-time 2026-04-22T23:59:59Z

判断

复制代码
Average > 80%
Maximum ≈ 100%

👉 表示:

CPU 已经被打满


五、可选指标(Unlimited 模式)

如果你的实例是 Unlimited 模式,可以查:


1. 超额 CPU(欠债)

复制代码
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUSurplusCreditBalance \
  --dimensions Name=InstanceId,Value=你的实例ID \
  --statistics Average \
  --period 300 \
  --start-time 2026-04-22T00:00:00Z \
  --end-time 2026-04-22T23:59:59Z

2. 被收费的超额 CPU

复制代码
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUSurplusCreditsCharged \
  --dimensions Name=InstanceId,Value=你的实例ID \
  --statistics Sum \
  --period 300 \
  --start-time 2026-04-22T00:00:00Z \
  --end-time 2026-04-22T23:59:59Z

六、系统层面验证(强烈建议)

1. vmstat

复制代码
vmstat 1

重点看:

复制代码
r = 等 CPU 的进程数

判断

如果:

复制代码
r > CPU核数

👉 CPU 不够


2. top

复制代码
top

看:

复制代码
id ≈ 0
load > CPU核数

👉 CPU 已经满载 + 排队


七、最终判断公式(核心总结)

如果你看到:

复制代码
CPUCreditBalance = 0
+ CPUCreditUsage 很高
+ CPUUtilization ≈ 100%
+ vmstat r > vCPU
+ load > vCPU

👉 可以 100% 确认:

CPU 不够(而且是被 T 系列 credit 限制)


八、结论与建议

当前问题本质

复制代码
不是机器太弱
而是 T 系列 CPU 被限速

推荐方案

场景 推荐实例
通用 m6g / m7g
数据库(推荐) r6g / r7g

一句话总结

T 系列不是"低配机器",而是"限速机器",CPU credit 用完后性能会骤降。


相关推荐
百锦再1 小时前
时序数据库选型指南:大数据时代的“数据基建”与 IoTDB 的工业原生之路
大数据·数据库·mysql·oracle·sqlserver·时序数据库·iotdb
SNOWPIAOP2 小时前
WSL 下使用 Claude Code Router 将 VS Code Claude Code 指向 AWS Bedrock GLM-5 模型
云计算·claude·aws·ccr
weikecms2 小时前
2026企微SCRM社群管理工具推荐
大数据·人工智能
前端若水2 小时前
Git 全命令超级详细指南
大数据·git·elasticsearch
末代程序员_C2 小时前
Maven版本管控:多分支并行开发中的API版本管理之道
大数据·elasticsearch·maven
Omics Pro2 小时前
癌症亚型分类新型多组学整合框架
大数据·人工智能·python·算法·机器学习·分类·数据挖掘
dingzd952 小时前
视频创作工具持续升级跨境社媒内容生产流程如何做轻量化
大数据·人工智能·新媒体运营·市场营销·跨境
GlobalInfo2 小时前
2026年喷涂机器人行业市场调查与投资建议分析
大数据·人工智能·机器人
Jason_zhao_MR2 小时前
基于米尔RK3576核心板的国产割草机器人解决方案
大数据·linux·人工智能·单片机·物联网·机器人·嵌入式