起因

服务器负载每隔一段时间就有负载过高报警,想着装一个面板不至于负载过高,然后就开始排查。

目前是关闭了该服务器的预警。其性能问题我也无法解决~

image-20240626113742980-vlll.png

过程

top检查

在报警的时候 top 查看了下系统进程

image-20240626114112022-qciz.png

使用 top 命令没有看到服务器的负载有异常,但从 load average 看到最近的 15 分钟负载确实有一点高。

从第一行load average中可以看出来系统近1分钟负载过高,核心进程是1panel和dotnet,(1panel肯定没问题)

htop检查

apt install htop
# 然后按下F5展示进程树

从htop可见dotnet相关进程(线程)MyNodeQuery占用CPU过多

image-20240626115107917-slsk.png

问了我大佬(🤩)的服务器不会出现这种情况

mynoequery确实有一些定时任务,但是不至于太高负载。(每次定时任务会导致负载报警)

跑个gb5测试可知结果是CPU性能太差啦!!!

gb5测试

仓库地址

https://github.com/i-abc/GB5

结果如下

# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
#            专用于服务器的GB5测试             #
#                 v2024-05-08                  #
#         bash <(curl -sL bash.icu/gb5)        #
#         https://github.com/i-abc/gb5         #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
​
当前时间:2024-06-26 11:44:21 CST
净测试时长:3分45秒
​
Geekbench 5 测试结果
​
系统信息
  Operating System              Debian GNU/Linux 11 (bullseye)
  Kernel                        Linux 5.10.0-28-amd64 x86_64
  Model                         QEMU Standard PC (Q35 + ICH9, 2009)
  Motherboard                   N/A
  BIOS                          SeaBIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org
​
处理器信息
  Name                          Intel Xeon E5-2680 v3
  Topology                      1 Processor, 1 Core
  Identifier                    GenuineIntel Family 6 Model 63 Stepping 2
  Base Frequency                2.50 GHz
  L1 Instruction Cache          32.0 KB
  L1 Data Cache                 32.0 KB
  L2 Cache                      4.00 MB
  L3 Cache                      16.0 MB
​
内存信息
  Size                          965 MB
​
单核测试分数:502
多核测试分数:476
详细结果链接:https://browser.geekbench.com/v5/cpu/22619171
可供参考链接:https://browser.geekbench.com/search?k=v5_cpu&q=Intel%20Xeon%20E5-2680%20v3
​
个人保存链接:https://browser.geekbench.com/v5/cpu/22619171/claim?key=1742

image-20240626125025746-jzoc.png

单多和分数太低了:跑mynodequery还是算了,之后再迁移吧~ QWQ

服务器负载的排查思路

关于负载

Load 就是对计算机干活多少的度量,Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load。

下列图片转载自:

https://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html

如有侵权,请联系我,我将删除!

系统负荷为0,意味着大桥上一辆车也没有。

bg2011073004-kdth.png

系统负荷为0.5,意味着大桥一半的路段有车。

bg2011073005-szch.png

系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

bg2011073006-imxs.png

系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%。以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍。总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。

bg2011073007-fxub.png

排查思路

  • CPU使用率或负载过高:一般来说,当CPU使用率≥80%时,定义为CPU使用率过高。CPU使用率持续过高,可能会导致实例运行速度变慢,自动关机或重启、无法登录等问题。

  • 带宽使用率过高:一般来说,带宽使用率≥当前带宽80%时,定义为带宽使用率过高。带宽使用率持续过高,将影响实例的网络连通性或网络吞吐,例如实例无法远程连接、网速过慢等。

  • 内存使用率过高:一般来说,当内存使用率≥80%时,定义为内存使用率过高。内存使用率过高,可能会出现系统卡顿、内部服务响应速度变慢等问题。

  • I/O使用率过高:一般来说,当前I/O读写≥该云盘I/O的80%时,定义为I/O使用率过高。I/O使用率过高,可能会出现文件读写变慢、应用性能下降或报错等问题。

sar查看负载状况

sar是System Activity Reporter(系统活动情况报告)的缩写,sar工具对系统状态进行取样后,通过计算数据和比例来表达系统当前的运行状态。其特点是可以连续对系统取样,获得大量的取样数据。其取样数据和分析结果可以存入文件,所需的负载很小。

sar是Linux系统中较为全面的性能分析工具,可以从多个方面对系统的活动进行监控和报告,包括文件读写情况、系统调用使用情况、串口、CPU效率、内存使用情况、进程活动及IPC(Inter-Process Communication,进程间通信)等。

  • 安装

    apt install sysstat
    # debian/ubuntu
    ​
    yum install sysstat
    # centos
  • 启动

     systemctl start sysstat
  • 查看启动状态

    systemctl status sysstat

    image-20240626133632065-vuwg.png

    能看见active表示已经启动运行

查看CPU使用率

sar -u 1 5   #每隔一秒刷新,刷新5次

显示如下

root@s4670:~# sar -u 1 5   #每隔一秒刷新,刷新5次
Linux 5.10.0-28-amd64 (s4670)   06/26/2024      _x86_64_        (1 CPU)
​
01:27:38 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:27:39 PM     all      6.12      0.00      2.04      0.00      2.04     89.80
01:27:40 PM     all      8.08      0.00      3.03      0.00      0.00     88.89
01:27:41 PM     all      5.10      0.00      2.04      0.00      0.00     92.86
01:27:42 PM     all      4.12      0.00      2.06      0.00      0.00     93.81
01:27:43 PM     all      3.09      0.00      1.03      0.00      1.03     94.85
Average:        all      5.32      0.00      2.04      0.00      0.61     92.02
  • %user:用户模式下消耗的CPU时间比例。

  • %nice:通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间比例。

  • %system:系统模式下消耗的CPU时间比例。

  • %iowait:CPU等待磁盘I/O导致空闲状态消耗的时间比例。

  • %steal:利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例。

  • %idle:CPU空闲时间百分比。

查看队列长度和CPU平均负载

sar -q 1 10    #每隔一秒刷新,刷新10次

结果如下

root@s4670:~# sar -q 1 10    #每隔一秒刷新,刷新10次
Linux 5.10.0-28-amd64 (s4670)   06/26/2024      _x86_64_        (1 CPU)
​
01:41:37 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
01:41:38 PM         0       213      0.54      0.63      0.55         0
01:41:39 PM         0       213      0.54      0.63      0.55         0
01:41:40 PM         0       213      0.54      0.63      0.55         0
01:41:41 PM         2       213      0.54      0.63      0.55         0
01:41:42 PM         0       213      0.54      0.63      0.55         0
01:41:43 PM         0       212      0.50      0.62      0.55         0
01:41:44 PM         0       212      0.50      0.62      0.55         0
01:41:45 PM         0       212      0.50      0.62      0.55         0
01:41:46 PM         0       211      0.50      0.62      0.55         0
01:41:47 PM         2       208      0.50      0.62      0.55         0
Average:            0       212      0.52      0.62      0.55         0
  • runq-sz:运行队列的长度,即等待运行的进程数。

  • plist-sz:进程列表中进程(processes)和线程(threads)的数量。

  • ldavg-1:最后1分钟的系统平均负载。

  • ldavg-5:最后5分钟的系统平均负载。

  • ldavg-15:最后15分钟的系统平均负载。

查看磁盘负载

sar -d 1 3    #每隔一秒刷新,刷新3次

结果如下:

image-20240626134425501-jtpr.png

  • tps:每秒I/O的传输总数。

  • rd_sec/s:每秒读取的扇区的次数。

  • wr_sec/s:每秒写入的扇区的次数。

  • avgrq-sz:平均每次磁盘I/O操作的扇区大小。

  • avgqu-sz:磁盘请求队列的平均长度。

  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间。

  • svctm:系统处理每次请求的平均时间。

  • %util:I/O请求占用的CPU百分比,值越高,说明I/O越慢。

查看内存负载

sar -r 1 3    #每隔一秒刷新,刷新3次

结果如下

image-20240626134546244-tyyg.png

  • kbmemfree:该值和free命令中的free值基本一致,不包括buffer和cache空间。

  • kbmemused:该值和free命令中的used值基本一致,包括buffer和cache空间。

  • %memused:物理内存使用率,该值是kbmemused和内存总量(不包括swap内存)的百分比。

  • kbbuffers和kbcached:这两个值和free命令中的buffer和cache一致。

  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存,即RAM加上swap的内存。

  • %commit:该值是kbcommit与内存总量(包括swap内存)的百分比。

查看IO负载

sar -b 1 10 #每隔一秒刷新,刷新10次

结果如下

image-20240626134712318-wsxp.png

  • tps:每秒钟向物理设备请求数据次数。

  • rtps:每秒钟向物理设备读请求次数。

  • wtps:每秒钟向物理设备写请求次数。

  • bread/s:每秒钟从物理设备读入的数据量。

  • bwrtn/s:每秒钟向物理设备写入的数据量。

常见sar命令参数

sar命令的参数说明如下,区分大小写。

  • -A:汇总所有的报告。

  • -a:报告文件读写使用情况。

  • -B:报告附加缓存的使用情况。

  • -b:报告缓存的使用情况。

  • -c:报告系统调用的使用情况。

  • -d:报告磁盘的使用情况。

  • -g:报告串口的使用情况。

  • -h:报告关于buffer使用的统计数据。

  • -m:报告IPC消息队列和信号量的使用情况。

  • -n:报告命名cache的使用情况。

  • -p:报告调页活动的使用情况。

  • -q:报告运行队列和交换队列的平均长度。

  • -R:报告进程的活动情况。

  • -r:报告没有使用的内存页面和硬盘块。

  • -u:报告CPU的利用率。

  • -v:报告进程、i节点、文件和锁表状态。

  • -w:报告系统交换活动状况。

  • -y:报告TTY设备活动状况。

htop查看进程负载情况

htop是Linux系统中的一个互动进程查看器,可以很直观地查看CPU、内存、swap的使用情况及平均负载。

与 Linux 传统的 top 相比, htop 更加人性化. 它可让用户交互式操作, 支持颜色主题, 可横向或纵向滚动浏览进程列表, 并支持鼠标操作.

推荐使用htop(新时代)而不是top(落后啦)

  • 安装

    apt install htop
    # ubuntu/debian
    ​
    yum install htop
    # centos
  • 启动

    htop

htop启动后的界面如下图所示,不同区域说明如下:

  • ①:左侧显示CPU、内存、swap交换区的使用情况,右侧显示进程总数、平均负载及系统运行时间。

  • ②:当前系统中所有进程的使用情况,可通过单击CPU%或MEM%对CPU使用率及内存使用率排序,查看使用率较高的进程。

  • ③F1到F10功能键。

image-20240626135125273-xabc.png

参数信息说明

PID:

进行的标识号

USER:

运行此进程的用户

PRI:

进程的优先级

NI:

进程的优先级别值, 默认的为 0, 可以进行调整

VIRT:

进程占用的虚拟内存值

RES:

进程占用的物理内存值

SHR:

进程占用的共享内存值

S:

进程的运行状况, R 表示正在运行、S 表示休眠, 等待唤醒、Z 表示僵死状态

%CPU:

该进程占用的 CPU 使用率

%MEM:

该进程占用的物理内存和总内存的百分比

TIME+:

该进程启动后占用的总的 CPU 时间

COMMAND:

进程启动的启动命令名称

快捷指令如下(重点在于F1-F10)

:快捷键1

快捷键2

作用

h, ?

F1

查看 htop 使用说明

S

F2

htop 设定

/

F3

搜索进程

\

F4

增量进程过滤器

t

F5

显示树形结构

<,>

F6

选择排序方式

[

F7

可减少 nice 值可以提高对应进程的优先级

]

F8

可增加 nice 值, 降低对应进程的优先级

k

F9

可对进程传递信号

q

F10

结束 htop

u

只显示一个给定的用户的过程

U

取消标记所有的进程

H

显示或隐藏用户线程

K

显示或隐藏内核线程

F

跟踪进程

P

按 CPU 使用排序

M

按内存使用排序

T

按 Time+ 使用排序

L

显示进程打开的文件

I

倒转排序顺序

s

选择某进程, 按 s: 用 strace 追踪进程的系统调用

Ctrl-L

刷新

命令行帮助

描述

命令行选项

使用一个单色的配色方案

-C 等价于--no-color

设置延迟更新时间,单位秒

-d 等价于--delay=DELAY

显示htop 命令帮助信息

-h 等价于--help

只显示一个给定的用户的过程

-u 等价于--user=USERNAME

只显示给定的PIDs

-p 等价于--pid=PID,PID…

依此列来排序

-s 等价于--sort-key COLUMN

显示版本信息

-v 等价于–version


我将,点燃星海~