帮助中心

服务器、网络和账户的分步教程。

云服务器(VPS)

VPS 的 CPU、磁盘 I/O 与带宽监控(htop、iotop、vnStat、Netdata)及合理使用规则

VPS 的 CPU、磁盘 I/O 与带宽监控(htop、iotop、vnStat、Netdata)及合理使用规则

要让 JUSTG 云服务器符合合理使用规则,只需关注三个指标:1 小时平均 CPU 使用率(不超过 50%)、持续磁盘吞吐(不得在 100 MiB/s 以上持续 4 小时或更久)、网络使用(不得长时间占用共享端口 70% 以上),再加上每月流量。本文介绍如何在 Debian、Ubuntu 和 Rocky Linux / AlmaLinux 上用常见 Linux 工具测量这些指标、在触及限制前收到提醒,以及如何给自己的任务限速。

合理使用规则与各方案限制

资源云服务器规则
CPU短时间跑满 100% 没有问题。若 1 小时平均使用率超过 50%,CPU 会被自动限制在 50%。
存储 I/O不得在 100 MiB/s 以上持续 4 小时或更久。
网络端口端口为共享端口:不要长时间占用 70% 以上。所有方案都是 500 Mbps 端口,70% 约为 350 Mbps。

每个方案还包含每月流量额度:

方案CPU内存每月流量
mini1 核512 MB500 GB
012 核1 GB1 TB
023 核2 GB2 TB
034 核4 GB3 TB
045 核8 GB4 TB
056 核16 GB5 TB
067 核24 GB6 TB

价格和详细配置请参阅云服务器方案说明。

步骤 1:安装工具

# Debian / Ubuntu
apt update && apt install -y htop sysstat iotop vnstat nload iftop

# Rocky Linux / AlmaLinux (htop, vnstat, nload and iftop come from EPEL)
dnf install -y epel-release && dnf install -y htop sysstat iotop vnstat nload iftop

步骤 2:查看 CPU 负载与 1 小时平均值

合理使用规则看的是 1 小时平均值,只瞄一眼 top 并不够。请使用以下命令:

nproc                        # number of vCPU cores
uptime                       # load average over 1, 5 and 15 minutes
top -b -n 1 | head -n 5      # %Cpu(s) line: us sy ni id wa ... st
mpstat 60 60                 # one hour of 1-minute samples, then an "Average" line
pidstat -u 5 3               # which processes use the CPU
  • top 中的 %Cpu(s) 代表整台 VPS。CPU 使用率等于 100 - id,所以 id 连续一小时低于 50,就说明已超过限制。
  • htop 用一条进度条显示每个核心。单个进程可能显示超过 100%,因为 100% 表示占满一个核心。按 P 按 CPU 排序,按 M 按内存排序。
  • Load average 统计的是等待 CPU 和磁盘的进程,因此负载高而 CPU 使用率低时,通常是 I/O 太慢。
  • st(steal)是虚拟化层分给其他用户的时间。如果你自己的使用率很低而 st 一直偏高,请附上命令输出提交工单。

想查看过去的时段,请开启 sar 历史记录。它每 10 分钟采样一次,事后可以查看任意一个小时:

# Debian / Ubuntu: turn on history collection (Rocky/Alma: only enable the service)
sed -i 's/^ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
systemctl enable --now sysstat

sar -u                           # CPU every 10 minutes today, plus an Average
sar -u -s 13:00:00 -e 14:00:00   # one specific hour
sar -d -p                        # disk throughput history (rkB/s, wkB/s)
sar -n DEV                       # network history per interface (rxkB/s, txkB/s)

步骤 3:用 iostat、iotop 和 pidstat 测量磁盘 I/O

iostat -xm 5        # per disk (e.g. vda): rMB/s, wMB/s, %util, r_await, w_await
iotop -oPa          # only processes doing I/O, with accumulated totals
pidstat -d 5        # per-process kB_rd/s and kB_wr/s

# If iotop warns about CONFIG_TASK_DELAY_ACCT, enable it until the next reboot:
sysctl -w kernel.task_delayacct=1

在 iostat 中,把你那块硬盘的 rMB/s 与 wMB/s 相加。短时峰值很正常,关键是两者之和是否连续数小时维持在 100 左右或更高。常见原因有:大型备份、数据库导入、日志暴增、小方案频繁使用 swap,或爬虫写入数百万个文件。iotop 和 pidstat -d 能找出是哪个进程造成的。

%util 高、await 长但 MB/s 很低,通常是大量小块随机写入:用起来感觉很慢,但并不等于持续高吞吐。

步骤 4:用 vnStat 统计每月流量

vnStat 在后台按网卡记录流量,几乎不占资源,重启后历史数据也会保留。

systemctl enable --now vnstat
ip -br link              # interface name, e.g. eth0 or ens3

vnstat -i eth0           # summary (data appears after about 5 minutes)
vnstat -m                # per month, with an estimate for the current month
vnstat -d                # per day
vnstat -h                # per hour
vnstat -l                # live rate in Mbit/s, Ctrl+C to stop

vnstat -m 按月显示接收(rx)、发送(tx)和总流量,并给出当月的 estimated 预估值。请把预估值与你方案的流量额度对比。vnStat 统计的是双向流量;如果不确定你的额度如何计算,请提交工单咨询。

想实时查看端口占用,可以用下面的命令。若在 500 Mbps 端口上长时间维持在 350 Mbps 左右,就已超过 70% 的参考线:

nload eth0               # live in/out graph for one interface
iftop -i eth0 -P         # live traffic per connection, with ports
ss -tnp state established | head -n 20   # which processes hold connections

步骤 5:可选的监控面板:Netdata 或 Prometheus node_exporter

Netdata

Netdata 无需配置即可实时绘制 CPU、磁盘、网络和各项服务的图表。它可能占用 100 MB 以上内存,更适合 2 GB 及以上的方案;mini 和 01 方案建议使用上面的命令行工具。切勿把它的端口暴露到公网:

# Debian / Ubuntu (Rocky/Alma: dnf install -y netdata from EPEL)
apt install -y netdata

# /etc/netdata/netdata.conf - listen on localhost only
[web]
    bind to = 127.0.0.1

systemctl restart netdata
ss -tlnp | grep 19999        # must show 127.0.0.1:19999, not 0.0.0.0 or *

# On your own computer: open a tunnel, then browse http://localhost:19999
ssh -N -L 19999:127.0.0.1:19999 [email protected]

Prometheus node_exporter

如果你已经在其他服务器上运行 Prometheus 和 Grafana,VPS 上装轻量的 node_exporter 就够了。它默认在所有网卡上监听 9100 端口,因此只允许你的 Prometheus 服务器访问(Rocky/Alma 请使用 Prometheus 发布页提供的官方二进制文件):

apt install -y prometheus-node-exporter
ss -tlnp | grep 9100

# Allow only your Prometheus server to scrape it
ufw allow from 203.0.113.30 to any port 9100 proto tcp
# firewalld (Rocky/Alma):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.30" port port="9100" protocol="tcp" accept'
firewall-cmd --reload
监控页面会暴露进程名、磁盘结构和流量规律。请绑定到 127.0.0.1,或只允许单个来源 IP 访问。详见 UFW 与 firewalld 防火墙教程。

步骤 6:设置简单的告警

下面这个小脚本会在以下情况发出提醒:15 分钟负载超过核心数的一半、根分区使用率达到 85%,或当月流量超过额度的 80%。负载只是粗略的早期信号,真实的 CPU 平均值请用 sar -u 确认。告警会写入系统日志,也可以选择推送到 webhook(聊天工具、邮件网关等):

#!/bin/bash
# /usr/local/sbin/vps-alert.sh - simple early warnings, run from cron
QUOTA_GB=1000        # your plan's monthly traffic, e.g. plan 01 = 1 TB
IFACE=eth0
WEBHOOK=             # optional, e.g. https://hooks.example.com/REPLACE-ME

alert() {
  logger -t vps-alert "$1"
  [ -n "$WEBHOOK" ] && curl -fsS -m 10 --data-urlencode "text=$(hostname): $1" "$WEBHOOK" >/dev/null
}

CORES=$(nproc)
LOAD15=$(cut -d' ' -f3 /proc/loadavg)
awk -v l="$LOAD15" -v c="$CORES" 'BEGIN { exit !(l > c * 0.5) }' \
  && alert "15-minute load $LOAD15 on $CORES cores"

DISK=$(df --output=pcent / | tail -n 1 | tr -dc '0-9')
[ "$DISK" -ge 85 ] && alert "root file system ${DISK}% full"

USED=$(vnstat -i "$IFACE" --oneline b | cut -d';' -f11)
[ -n "$USED" ] && [ "$USED" -gt $(( QUOTA_GB * 800000000 )) ] \
  && alert "over 80% of monthly traffic: $(( USED / 1000000000 )) GB"
exit 0
chmod 700 /usr/local/sbin/vps-alert.sh
echo '*/15 * * * * root /usr/local/sbin/vps-alert.sh' > /etc/cron.d/vps-alert
journalctl -t vps-alert --since today      # see past warnings

vnstat --oneline b 输出的第 11 个字段就是当月总流量(单位为字节)。请根据你的 VPS 设置 QUOTA_GB 和 IFACE。

步骤 7:给自己的任务限速

大多数合理使用问题都源自某一个重负载任务。只给这个任务限速,而不是拖慢整台服务器。

限制单条命令的 CPU 与磁盘

# Lowest CPU and disk priority for a one-off job
nice -n 19 ionice -c3 tar -czf /root/site.tar.gz /var/www

# Hard caps for a one-off job (cgroup v2: Debian 11+, Ubuntu 22.04+, Rocky/Alma 9)
lsblk -d -o NAME,SIZE        # disk name, usually vda
systemd-run --scope -p CPUQuota=50% \
  -p IOReadBandwidthMax="/dev/vda 50M" -p IOWriteBandwidthMax="/dev/vda 50M" \
  tar -czf /root/site.tar.gz /var/www

nice 和 ionice 只是降低优先级:没有其他任务竞争时,任务仍会全速运行;而且在虚拟硬盘常用的 none 或 mq-deadline 调度器下,ionice 不起作用。systemd-run 配合 CPUQuota 和 IO*BandwidthMax 才是真正的硬限制。CPUQuota=100% 等于一个完整核心。

为服务设置永久限制

systemctl edit myapp.service
# add in the editor:
[Service]
CPUQuota=100%
IOReadBandwidthMax=/dev/vda 80M
IOWriteBandwidthMax=/dev/vda 80M

systemctl restart myapp.service
systemctl show myapp.service -p CPUQuotaPerSecUSec

网络传输限速

rsync -a --bwlimit=20M /var/www/ [email protected]:/srv/www/   # about 170 Mbit/s
wget --limit-rate=20m https://example.com/big.iso
curl --limit-rate 20M -O https://example.com/big.iso

# Cap ALL outgoing traffic on eth0 at 300 Mbit/s (lost on reboot)
tc qdisc replace dev eth0 root tbf rate 300mbit burst 256kb latency 50ms
tc -s qdisc show dev eth0
tc qdisc del dev eth0 root        # remove the cap
tc 限速会作用于该网卡的全部出站流量,包括 SSH。请在保持登录的状态下测试,并另开一个会话,以便随时撤销。Docker 容器请改用 --cpus 和内存限制。

步骤 8:升级方案或改用独立服务器

限速适合应对偶发的高峰。如果日常负载就让 CPU 小时平均值超过 50%、需要长时间的高磁盘吞吐,或经常占满端口或每月流量,说明这台服务器已经不够用了:

  • 升级方案:在服务页面升级,获得更多核心、内存、SSD 和流量。请参阅如何升级 VPS 并扩展分区。
  • 选择独立服务器:适合长期高 CPU、高磁盘或高带宽的业务,整台硬件由你独享。独立服务器在东京、首尔和约翰内斯堡 $199/月起,莫斯科 $299/月起。可通过工单联系 Sales/Inquiries 获取建议。

FAQ

VPS 在长时间高负载后变慢,是触发了 CPU 限制吗?

有可能:如果 1 小时 CPU 平均使用率超过 50%,CPU 会被自动限制在 50%。用 htop 或 pidstat -u 找出占用高的进程,降低或限制它的负载,再用 sar -u 查看每小时的历史数据。

端口 70% 的规则和每月流量额度是一回事吗?

不是,二者相互独立。70% 规则针对的是长时间的速率(500 Mbps 端口约 350 Mbps),流量额度则是每月的总量。前者用 vnstat -l 或 nload 观察,后者用 vnstat -m 查看。

看不懂这些数据,可以找谁帮忙?

请向 Technical support 提交工单,并附上服务 IP、带时区的时间和命令输出。JUSTG 提供 7×24 小时 AI 客服(工单),需要人工处理的问题会由工程师跟进。

这篇文章有帮助吗?
帮助中心
云服务器(VPS) VPS IPv6 设置教程:Ubuntu Netplan、Debian、Rocky Linux 与 Windows Server 每台 JUSTG 云服务器除了 IPv4 之外,都免费提供 IPv6 地址。IPv6 让您多一条独立的通道连接 VPS,让网站能被只支持 IPv6 的移动网络访问,在需要额外地址时也是免费的替代方案。本文说明如何在… 云服务器(VPS) VPS 开通需要多久?交付时间与新 VPS 前 15 分钟必做设置 JUSTG 的 VPS 开通需要多久?云服务器(VPS)在付款后自动开通,并预先安装你所选操作系统的最新稳定版本。本文说明 VPS 与独立服务器的交付时间,并带你完成新 Linux 或 Windows VPS 的前 15… 云服务器(VPS) VPS IP 被中国大陆或第三方封锁怎么办?IP 连通性测试与 JUSTG 更换 IP 政策 如果你的 VPS IP 地址突然无法从中国大陆连接,或被第三方(例如某国防火墙、邮件黑名单或其他网络)封锁,采取行动前应先确认实际状况。本文说明 JUSTG 对被封锁 IP 的政策,示范如何从不同网络用 ping、tcping 与 mtr 测试 IP 连通性、IP… 云服务器(VPS) VPS 升级内存、SSD 硬盘或 IP 教程,以及扩展分区(Linux 与 Windows) 本文说明如何为 JUSTG VPS 升级内存(RAM)、SSD 硬盘或 IP 地址、独立服务器有何不同,以及升级后需要在操作系统内完成的设置。虚拟硬盘变大并不会自动扩大分区,因此本文也示范如何在 Linux(Debian、Ubuntu、CentOS、Rocky… 云服务器(VPS) 云服务器 VPS 该选哪个套餐?配置与价格详解 大多数小型项目选择 01 或 02 套餐即可,数据库和访问量较大的应用通常需要 03 或更高的套餐。JUSTG 七款云服务器套餐在东京、首尔和莫斯科完全相同,年付比月付可节省 17% 到 50%。 每个套餐都包含 KVM 虚拟化,可安装 Linux 或 Windows…
AlipayUnionPayVISAMastercardPayPalUSDTstripe