当前位置: 代码迷 >> 综合 >> 如何评估服务器基础性能 - CPU负载、使用率、内存磁盘使用率、网络带宽......
  详细解决方案

如何评估服务器基础性能 - CPU负载、使用率、内存磁盘使用率、网络带宽......

热度:88   发布时间:2023-09-21 04:07:15.0

文章目录

    • 关注服务硬软指标
      • 服务器关键指标
        • CPU 负载
        • CPU 使用率
        • 网卡 IN & OUT
        • 内存 & 磁盘
      • Q&A
      • 附录

如何评估服务器基础性能 - CPU负载、使用率、内存磁盘使用率、网络带宽......

关注服务硬软指标

在搭建维护服务时,我们经常和服务的性能指标打交道,比如,QPS、耗时、P90/99、等等;然而服务的良好运行依托于服务的部署,离不开机器支撑,所以我们也要去关注服务器的运行指标。

关注服务硬软指标、深耕业务特性、衡量 ROI …也是资深工程师进阶必掌握的技能!

服务器关键指标

有这样的场景,运行良好的服务中有两台机器即将过保,需要从其他服务中的机器中选出两个进行迁移,那么该如何去做选择呢?

首先我们要进行机房粒度的思考,考量每个候选机器的所在机房,和过保机器的机房是否一致。服务需要进行跨机房部署,确保服务灾备及高可用。从候选机中选出与迁移服务所在机房互斥的集合作为首先机器。理论上选择过保机房机器即可。

CPU 负载

然后我们需要观察首先机器的 CPU 负载,确保 CPU 还有余力去支撑新的服务。如果有机房监控可以直接观察最近 5 分钟负载走势观察。没有的话,可以通过 w 命令行进行观察。

  • w 指令

w 命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

我们只需要关注头信息

 16:07:37 up 788 days, 3 min, 16 users,  load average: 3.59, 4.93, 5.48

Load average 为最近 1 分钟、5 分钟、15 分钟内机器的平均负载。

  • 平均负载意味着,CPU 的负荷指数。
    CPU 全负荷指数为 1 ,1.5 CPU 正在全力处理中且还有 一半的负载在等待。
    如果把 CPU 当作一辆车,则 1 是满载, 1.5 是车已经满载了,地上还有半车等着拉…
    可见,负荷指数 1 是个特殊值,一旦超过,就意味着服务任务已经超出 CPU 处理能力。一但负荷指数为 3+,那意味这服务已经接近死机,停服了…

故,这里负载最佳在 0.7-,让 CPU 畅畅快快的运行拉货,超过 0.7 就要考虑是否手动干预降低负载了,防止负荷升级。

  • 长尾解释
    -h:不打印头信息
    -u:当显示当前进程和cpu时间时忽略用户名
    -s:使用短输出格式
    -f:显示用户从哪登录
    -o:老式输出
    -i:显示IP地址而不是主机名(如果可能)

  • 行意义解释
    USER:登陆用户名
    TTY:登陆后系统分配的终端号
    FROM:远程主机名,即从哪里登陆的
    LOGIN@:何时登陆的
    IDLE:用户空闲时间。这是个计时器,一旦用户执行任何操作,该计时器便会被重置
    JCPU:和该终端连接的所有进程占用时间。包括正在运行和后台作业占用时间
    PCPU:当前进程锁占用时间
    WHAT:当前正在运行进程的命令

CPU 使用率

我们要考量 CPU 使用率是否已经满负荷,还有余力支撑新服务。如果有机房监控可以直接观察 CPU 使用率走势观察。没有的话,可以通过 top 命令行进行观察。

top - 16:47:56 up 788 days, 43 min, 16 users,  load average: 5.47, 5.25, 4.89
Tasks: 605 total,  1 running, 600 sleeping,  0 stopped,  4 zombie
%Cpu(s): 22.1 us, 14.6 sy,  0.5 ni, 51.0 id,  9.6 wa,  0.0 hi,  2.3 si,  0.0 st
KiB Mem : 65755892 total, 10136416 free, 15335236 used, 40284240 buff/cache
KiB Swap:  8388604 total,  2480316 free,  5908288 used. 45870540 avail Mem 

我们关注第三行

%Cpu(s): 22.1 us, 14.6 sy,  0.5 ni, 51.0 id,  9.6 wa,  0.0 hi,  2.3 si,  0.0 st

其中 51.0 id 为 CPU 空闲百分比,使用率为 100-51.0=49.0;

一般以 CPU 使用率在 65~70%- 为佳。这样的话,资源贴近合理分配:user 空间保持在 65%~70% ,system 空间保持在 30% ,空闲保持在 0%~5% 。

  • CPU 状态解释
    0.0%us【user space】— 用户空间占用CPU的百分比。
    0.3%sy【sysctl】— 内核空间占用CPU的百分比。
    0.0%ni【】— 改变过优先级的进程占用CPU的百分比
    99.7%id【idolt】— 空闲CPU百分比
    0.0%wa【wait】— IO等待占用CPU的百分比
    0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
    0.0%si【Software Interrupts】— 软中断占用CPU的百分比

网卡 IN & OUT

我们要考虑上下行带宽是否已经全占用,还有带宽支持新服务。我们一般通过监控采集,或者 iftop 等工具协助获得网卡的实时带宽。

这里要衡量服务现占用的带宽上限是否在首先机器的额外带宽阈值区间内。一般服务器都是 千兆 网卡,不会成为服务瓶颈,故这里省略详情。

内存 & 磁盘

我们要考量 内存 & 磁盘是否满载,还有空间支撑新服务。我们可以通过 free 指令观察 内存占用指标。

              total        used        free      shared  buff/cache   available
Mem:          64214       14995        9647        3252       39571       44775
Swap:          8191        5769        2422
  • Free 指令
    free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

不带任何选项运行 free 命令会显示系统内存,包括空闲(free)、已用(used)、交换(swap)、缓冲(buffers)、缓存(cached)和交换(swap)的内存总数。

  • 行意义解释
    • 第一行:表明全部内存、已用内存、空闲内存、共用内存(主要被 tmpfs(/proc/meninfo 中的 Shmem 项)使用)、用于缓冲的内存以及缓存内容大小。
      • 全部:全部已安装内存(/proc/meminfo 中的 MemTotal 项)
      • 已用:已用内存(全部计算 - 空间+缓冲+缓存)
      • 空闲:未使用内存(/proc/meminfo 中的 MemFree 项)
      • 共用:主要被 tmpfs 使用的内存(/proc/meminfo 中的 Shmem 项)
      • 缓冲:被内核缓冲使用的内存(/proc/meminfo 中的 Buffers 项)
      • 缓存:被页面缓存和 slab 使用的内存(/proc/meminfo 中的 Cached 和 SSReclaimable 项)
    • 第二行:表明已用和空闲的缓冲/缓存
    • 第三行:表明总交换内存(/proc/meminfo 中的 SwapTotal 项)、空闲内存(/proc/meminfo 中的 SwapFree 项)和已用交换内存。

内存计算规则

内存使用率(MEMUsedPerc)=100*(MemTotal-MemFree-Buffers-Cached)/MemTotal

通过计算规则,我们可以计算出当前机器内存使用情况,可以对比新服务的情况进行择优处理即可,磁盘情况类似。

Q&A

1、CPU 负载中最近 1 分钟、5 分钟、15 分钟数据以哪个为准呢?

通常以 5 分钟为准,1 分钟可能存在暂时现象,随后可能就恢复;15 分钟已经快凉了,意义不大

2、如果都是通过 Linux 指令查看各个指标,效率也太低了?

对,可以通过运维团队建立的实时监控观察

附录

日升月落,总有黎明