【银河麒麟V10】【服务器】系统负载分析

一、cpu负载

1、CPU基本概念

1.1、什么是物理cpu个数

物理cpu个数即主板上实际能够看到的cpu个数(也是cpu插槽数)

1.2、 什么是cpu核数

cpu核数指的是物理cpu个数 * 每个物理cpu的核心数,因为每个物理cpu可能包含多个核心,如下图,有2个物理cpu,每个物理cpu包含4个核心,即该服务器/主板是8核。

 1.3、什么是逻辑cpu个数

总逻辑CPU个数 = 物理CPU个数 * 每个物理CPU的核数 * 每个核的超线程数,一般超线程是乘以2,即:总逻辑CPU个数 = 物理CPU个数 * 每个物理CPU的核数 * 2,如果没有超线程,那么,总逻辑CPU个数 = 物理CPU个数 * 每个物理CPU的核数。

1.4、原生多核与封装多核

原生多核:

是真正意义上的多核,最早由AMD提出,每个核心之间都是完全独立的,都拥有自己的前端总线,不会造成冲突,即使在高负载状况下,每个核心都能保证自己的性能不受太大的影响。(即原生多核的抗压能力强,但是需要先进的工艺,每扩展一个核心都需要很多的研发时间)


封装多核:

只把多个核心直接封装在一起,比如Intel早期的PD双核系列,就是把两个单核直接封装在一起。(性能更弱、成本高,但是发展研发更快)

1.5、什么是超线程技术

四核八线程主要涉及的就是超线程技术:
  它由 Intel 研发,是把处理器内部的一个物理CPU模拟成两个逻辑CPU(以后也许有多个),让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲CPU资源,在相同时间内完成更多工作,在一定程度上提高了运行效率和性能。
  所以才会出现了我们提到的四核八线程,也就是将四个物理核心模拟成八个逻辑核心,同时会有四核支持八线程的操作。
  但是呢,四核八线程虽然模拟出来的是八核,其实和真实八核区别很大,虽然采用超线程技术能同时执行两个线程,但它并不能像两个真实CPU那样,每个CPU都具有独立的资源。单一资源同时只能支持一个CPU占用,因此当这些资源闲置后另一个CPU才能继续占用。并且,单一核心模拟出的两个逻辑核心的单个性能会有所下降。

1.6、几路几核几线程是什么意思

比如单路四核八线程

单路指的是有1个cpu插槽(即物理cpu,physical id),4核指的是每个物理cpu的核数(core id),8线程指的是每个核通过超线程虚拟成2个,即总逻辑cpu核数(processor)是8,即该cpu开启了超线程技术,超线程技术就是单个处理器基础上提供两个逻辑处理器。

【举例】:

a、对于两路四核超线程计算机,两路指计算机有2个物理CPU,每颗CPU中有4个物理内核,CPU支持超线程,就有2*4*2=16个逻辑CPU,这就是通常所谓的16核计算机;

b、双路四核超线程,解释为:两个物理CPU,每个CPU都是4核,然后每个核通过超线程虚拟成2个,一共就是16核。

1.7、物理核与虚拟核

物理核:

物理核数=cpu数(机子上装的cpu的数量) * 每个cpu的物理核数

虚拟核:
所谓的4核8线程,4核指的是cpu核数(core id)。通过超线程技术,用一个物理核模拟两个虚拟核,每个虚拟核1个线程,总数为8线程(即processor)。在操作系统看来是8个核,但是实际上是4个物理核。通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核。

2、查看cpu数

2.1、麒麟系统

lscpu

返回结果如下:

架构:                           aarch64         #arm64架构
CPU 运行模式:                   64-bit          #64位
字节序:                         Little Endian   #小端法
CPU:                             96             #cpu数量(逻辑cpu数量)
在线 CPU 列表:                  0-95            #在线的cpu数量,有时为了省电或者过热的时候,某些cpu会停止运行
每个核的线程数:                 1                #每个核心的线程数
每个座的核数:                   48               #每个cpu插槽(物理cpu)有几个核心
座:                             2               #cpu插槽(物理cpu)个数,英文会用socket表示
NUMA 节点:                      4      
厂商 ID:                        HiSilicon       #cpu厂商名称        
型号:                           0
型号名称:                       Kunpeng-920
步进:                           0x1             #可以理解为版本号
CPU 最大 MHz:                   2600.0000
CPU 最小 MHz:                   200.0000
BogoMIPS:                       200.00
L1d 缓存:                       6 MiB
L1i 缓存:                       6 MiB
L2 缓存:                        48 MiB
L3 缓存:                        96 MiB
NUMA 节点0 CPU:                 0-23
NUMA 节点1 CPU:                 24-47
NUMA 节点2 CPU:                 48-71
NUMA 节点3 CPU:                 72-95
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Not affected
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Not affected
Vulnerability Tsx async abort:   Not affected
标记:                           fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm
# 直接查看逻辑cpu总数
cat /proc/cpuinfo  | grep -i processor | wc -l      

2.2、centos系统

# 查看物理cpu个数
cat /proc/cpuinfo  | grep -i "physical id" | sort | uniq | wc -l

#查看每个cpu有几核
cat /proc/cpuinfo | grep "cpu cores" | uniq

#查看逻辑cpu总个数
cat /proc/cpuinfo| grep "processor"| wc -l

#查看cpu品牌信息
cat /proc/cpuinfo| grep "model name" | uniq

【补充】:

总逻辑CPU个数 = 物理CPU个数 * 每个物理CPU的核数 * 每个核的超线程数

总核数 = 物理CPU个数 * 每颗物理CPU的核数

(如果总逻辑cpu个数不等于总核数,则可以判断该cpu开启了超线程技术)

3、查看cpu负载

3.1、vmstat查看(系统自带)

#每隔1秒刷新1次,刷新3次
vmstat 1 3    

 【参数说明】:

字段含义
procs进程信息字段:
  • -r:等待运行的进程数,数量越大,系统越繁忙。当这个值超过了CPU数目,就会出现CPU瓶颈了。
  • -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
memory内存信息字段:
  • -swpd:虚拟内存的使用情况,单位为 KB。如果大于0,表示物理内存已不足。
  • -free:空闲的内存容量,单位为 KB。
  • -buff:缓冲的内存容量,单位为 KB。
  • -cache:缓存的内存容量,单位为 KB。
swap交换分区信息字段:
  • -si:从磁盘中交换到内存中数据的数量,单位为 KB。如果这个值大于0,表示物理内存不够用或者内存泄露了。
  • -so:从内存中交换到磁盘中数据的数量,单位为 KB。如果这个值大于0,表示物理内存不够用或者内存泄露了。
这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io磁盘读/写信息字段:
  • -bi:从块设备中读入的数据的总量,单位是块。
  • -bo:写到块设备的数据的总量,单位是块。
这两个数越大,代表系统的 I/O 越繁忙。
system系统信息字段:
  • -in:每秒被中断的进程次数。
  • -cs:每秒进行的事件切换次数。
这两个数越大,代表系统与接口设备的通信越繁忙。
cpuCPU信息字段:
  • -us:非内核进程消耗 CPU 运算时间的百分比。
  • -sy:内核进程消耗 CPU 运算时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于逻辑cpu数 80%说明可能存在CPU不足。
  • -id:空闲 CPU 的百分比。一般来说,id + us + sy = 100,id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
  • -wa:等待 I/O 所消耗的 CPU 百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重。
  • -st:被虚拟机所盗用的 CPU 百分比。

3.2、top查看(系统自带)

top

 【参数说明】:

行数参数解释
第1行

第1行是任务队列消息,同uptime命令的执行结果。

系统时间:13:45:19

系统运行时间:up 66天,16小时2分钟

当前登录用户:1 user

负载:0.02,0.01,0.00,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第2行

第2行,Tasks 任务(进程)

总进程:953 total,运行:1 running,休眠:951 sleeping,停止:0 stopped,僵尸进程:1 zombie

第3行

第3行,cpu状态信息

0.1%us:用户空间占用cpu百分比

0.2%sy:内核空间占用cpu百分比

0.0%ni:改变过优先级的进程占用cpu的百分比

99.8%id:空闲cpu百分比

0.0%wa:IO等待占用cpu百分比,参考值为30%,如果wa超过30%,说明IO等待严重

0.0%hi:硬中断占用cpu的百分比

0.0%si:软中断占用cpu的百分比

0.0%st:被虚拟机所盗用的 CPU 百分比

第4行

第4行:内存状态

总内存:130062.6total,单位MB(有时是KB,前面会有标识)

空闲内存:42319.9MB

已使用内存:11941.9MB

缓冲的交换区总量:75800.9MB

注:可用内存=free+buffer+cached

第4行中使用中的内存总量(used)指的是现在系统内核控制的内存数,

第4行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心

第5行

第5行:swap交换分区信息

总交换分区大小:4095.9 total

空闲的交换分区大小:4095.9 free

已使用的交换分区的大小:0.0 used

注:对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了

第6行空行
第7行

第7行,各进程(任务)的状态监控

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 I=空闲状态 X=进程消亡(所以不会在top和ps命令中看到X)
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计(cpu多核的话是累计计算),注意不是进程运行时间
COMMAND — 进程名称(命令名/命令行)

【补充】:

a、僵尸进程如何查看和杀死

(top命令如果zombie字段大于0,表示存在僵尸进程)

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

命令注解:

-A 参数列出所有进程

-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数

因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程

运行结果参考如下:

Z 12334 12339 /path/cmd

这时,我们可以使用 kill -HUP 12339来杀掉这个僵尸进程

运行后,可以再次运行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'来确认是否将僵尸进程杀死

如果kill 子进程的无效,可以尝试kill 其父进程来解决问题,例如上面例子父进程pid是 12334,那么我们就运行 kill -HUP 12334

如果查出来的僵尸进程很多 ,如果是同一个父进程,可以直接杀死父进程,如果每个僵尸死进程的父进程不一样,可以使用如下命令批量杀死僵尸进程:

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

二、内存负载

1、查看内存使用情况

1.1、free命令查看

free -m   #以MB为单位显示

free -h   #以G为单位显示

free -h -s 3    #持续观看内存变化,每3秒显示一次,按ctrl c终止

【参数说明】:

  • Mem 行(第二行)是内存的使用情况。
  • Swap 行(第三行)是交换空间的使用情况。对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
  • total 列显示系统总的可用物理内存和交换空间大小。
  • used 列显示已经被使用的物理内存和交换空间。
  • free 列显示还有多少物理内存和交换空间可用使用。严格来说used指的是现在系统内核控制的内存数,free是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
  • shared 列显示被共享使用的物理内存大小。
  • buff/cache 列显示被 buffer 和 cache 使用的物理内存大小,可用内存=free+buffer+cached。
  • available 列显示还可以被应用程序使用的物理内存大小。

1.2、查看meminfo文件

cat /proc/meminfo   #提供的信息和 free 命令看到的差不多

 1.3、其他方式(vmstat、top)

vmstat -s    #可以对内存使用情况进行统计, 类似于 /proc/meminfo

top -o %MEM  #使用top查看,并按内存使用从大到小排序,%CPU是按cpu占用从大到小排序

【补充】:

a、查看物理内存硬件信息

dmidecode -t 17      # -t是type指定查看类型,17代表内存,其他类型可以使用man dmidecode查看

三、磁盘负载

1、查看硬盘信息

1.1、区分硬盘是固态盘还是机械盘

#方法1:
#sda替换为实际盘符,返回1表示机械盘,返回0表示固态盘,0表示磁盘不可以旋转,那么就是SSD了
cat /sys/block/sda/queue/rotational   


#方法2:
lsblk -d -o name,rota    #同样0表示固态,1表示机械

2、IO负载查看

2.1、iostat查看

# -x 选项将用于显示和io相关的扩展数据; 1表示间隔;10表示时间
iostat -x 1 10    

【参数说明】:

选项说明
r/s每秒完成的读次数
rkB/s每秒读数据量(kB为单位)
rrqm/s每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
w/s每秒完成的写次数
wkB/s每秒写数据量(kB为单位)
wrqm/s每秒对该设备的写请求被合并次数
%util采用周期内用于IO操作的时间比率,即IO队列非空的时间比率,如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

2.2、iotop查看

非系统自带,需要安装iotop包。

特点:用于查看哪个线程耗IO比较高,按o键只显示有磁盘IO活动的进程。

iotop

iotop命令参数说明:
    -o, --only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
  -b, --batch非交互模式,一般用来记录日志。
  -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用。
  -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1。
  -p PID, --pid=PID指定监测的进程/线程。
  -u USER, --user=USER指定监测某个用户产生的I/O。
  -P, --processes仅显示进程,默认iotop显示所有线程。
  -a, --accumulated显示累积的I/O,而不是带宽。
  -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
  -t, --time 加上时间戳,非交互非模式。
  -q, --quiet 禁止头几行,非交互模式。有三种指定方式。
  -q 只在第一次监测时显示列名
  -qq 永远不显示列名。
  -qqq 永远不显示I/O汇总。
交互按键:
  和top命令类似,iotop也支持以下几个交互按键。
  left和right方向键:改变排序。  
  r:反向排序。
  o:切换至选项--only。
  p:切换至--processes选项。
  a:切换至--accumulated选项。
  q:退出。
  i:改变线程的优先级。

四、网络负载

1、查看网卡设备是百兆/千兆/万兆

ethtool ens33      #ens33替换成实际网卡名

如果是bond,可以直接查看bond状态

cat /proc/net/bonding/bond0     #bond0根据实际bond名替换

 

 如上,两个一万兆网卡做bond平衡轮询模式,所生成的bond速率是两万兆。

2、查看网络负载

2.1、sar命令分析

sar -n DEV 1 5    #每隔1秒显示1次,显示5次

 【参数释义】

IFACE:这一列表示设备名称

rxpck/s:这一列表示每秒进入收取的包的数量

txpck/s:这一列表示每秒发送出去的包的数量

rxkB/s:这一列表示每秒收取的数据量(单位为KB)

txkB/s:这一列表示每秒发送的数据量

2.2、nethogs查看

特点:非系统自带,属于nethogs,用于显示网卡上进程级的流量信息

nethogs    #查看所有网卡进程级流量,默认监控所有物理网卡

nethogs et0   #查看指定网卡进程级流量

nethogs -v 3  #指定网卡流量显示单位,默认KB,(0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB)

nethogs -a   #-a参数可以监控所有流量网卡,特别是回环口流量

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂安俊@kylinOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值