服务器性能排查

一、linux常用监控cpu整体性能的工具------vmstat

功能:报告关于内核线程、虚拟内存、磁盘、陷阱和cpu活动的统计信息。

参数详解:

-f 显示系统启动后的派生数目。

-i 显示从系统启动后每隔设备造成的终端数目。

-I 用新的输出栏显示I/O定向视图,p在标题kthr下,栏fi和fo在标题页面下,而不是栏下;re和cy在页标题中。

-vs 显示所有可用的vmm(运行各种虚拟机的OS)统计信息

-t 显示vmstat的每一输出行旁边的时间戳记。时间戳记按照HH:MM:SS格式显示。

范例:

1、vmstat 显示引导后的统计信息摘要

2、vmstat 2 5

显示2秒时间间隔的5个摘要,第一次摘要包含引导后的时间统计信息

3、vmstat scdisk13 scdisk14

显示引导后包括逻辑磁盘scdisk13和scdisk14的统计信息摘要

4、vmstat -f 显示派生统计信息

5、vmstat -s 对cpu,内存使用情况进行统计

6、vmstat -t 显示每一输出栏旁边的时间戳记

7、vmstat -I 要以另一套输出栏显示新的I/O定向视图

8、vmstat -vs 显示所有可用的vmm统计信息

各项意义:

vmstat 1 10

a4c26d1e5885305701be709a3d33442f.png

【procs】

r:在运行队列中等待的进程数

ready

b:在等待io的进程数

w:可进入运行队列但被替换的进程

【memory】

swpd:虚拟内存使用情况,单位KB。

swap:现时可用的交换内存,单位KB

free:空闲的内存,单位KB

buff:被用来做为缓存的内存数,单位KB

【swap】

si:从磁盘交换到内存的交换页数量,单位:KB/秒

so:从内存交换到磁盘的交换页数量,单位:KB/秒

【io】

bi:发送到块设备的块数,单位:块/秒

bo:从块设备接收到的块数,单位:块/秒

【system】

in:每秒中断书,包括时钟中断

cs:每秒的环境(上下文)切换次数

us:cpu用户使用时间百分比

sy:cpu系统使用时间百分比

id:cpu空闲时间百分比

wa:IO等待消耗的cpu时间百分比

分析:

(1)若连续

r>us,表示系统现在运行比较慢,有多数的进程在等待cpu。造成系统中进行运行过慢。

(2)若 r>4sy,则系统面临着cpu短缺的问题,或者是cpu速率过低。

(3)若经常 r>4 &

id<40,表示cpu的负荷很重。

(4)si,so值越大,会看到由内核消耗的cpu时间会越大。

(5)若swap(si和so)值比较高,并且free比较少,有可能是内存不足。

(6)若有过多的上下文切换(cs)和disk block从RAM中被读入(bo),就有可能导致cpu使用过高。

(7)sy的值高时,说明系统内核消耗的cpu资源多

(8)us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

(9)id持续为0并且sy=2us,系统则面临着cpu资源的短缺。

(10)wa>25%,表明磁盘子系统可能没有被正确平衡,或可能是磁盘工作负荷很重的结果。

如果再一个单用户系统中,us+sy>90%,我们就不认为系统的cpu是有瓶颈的

如果在一个多用户系统中,us+sy>80%,我们就认为系统的cpu是有瓶颈的。其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。

(11)wa>40%表明磁盘io没有也许存在不合理的平衡,或者对磁盘操作比较频繁

(12)wa值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)

结论:只是一个I/O瓶颈。

解决办法:

当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.

 

 

二、查看内存使用情况

1. 使用 free 命令

free 命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:

  1.  
    [root@centos ~]# free -m

    total used free shared buff/cache available
    Mem: 32157 747 1191 444 30219 30503
    Swap: 4095 7 4088

  2. [root@centos ~]# free -h 

    total used free shared buff/cache available
    Mem: 31G 749M 1.2G 444M 29G 29G
    Swap: 4.0G 7.4M 4.0G

其中, -m 选项是以MB为单位来展示内存使用信息; -h 选项则是以人类(human)可读的单位来展示。

上面的示例中, Mem: 这一行:

  • total   表示总共有的物理内存(RAM)。
  • used   表示物理内存的使用量,。
  • free   表示空闲内存;
  • shared   表示共享内存?;
  • buff/cache   表示缓存和缓冲内存量; Linux 系统会将很多东西缓存起来以提高性能,这部分内存可以在必要时进行释放,给其他程序使用。
  • available   表示可用内存;

输出结果很容易理解。 Swap 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。

2. 查看 /proc/meminfo

另一种方法是读取 /proc/meminfo 文件。 我们知道, /proc 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。

    [root@centos ~]# cat /proc/meminfo

[root@db-jtdbbase-41 ~]# cat /proc/meminfo
MemTotal:       32929612 kB
MemFree:         1216084 kB
MemAvailable:   31232024 kB
Buffers:              20 kB
Cached:         29858228 kB
SwapCached:           44 kB
Active:         23932096 kB
Inactive:        6501256 kB
Active(anon):     810916 kB
Inactive(anon):   219576 kB
Active(file):   23121180 kB
Inactive(file):  6281680 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4186752 kB
Dirty:                48 kB
Writeback:             0 kB
AnonPages:        575160 kB
Mapped:            71028 kB
Shmem:            455388 kB
Slab:            1086280 kB
SReclaimable:    1015904 kB
SUnreclaim:        70376 kB
KernelStack:        8496 kB
PageTables:         6004 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    20659104 kB
Committed_AS:    2473860 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:    516096 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      245568 kB
DirectMap2M:     8142848 kB
DirectMap1G:    27262976 kB

重点关注这些数据:

  • MemTotal, 总内存
  • MemFree, 空闲内存
  • MemAvailable, 可用内存
  • Buffers, 缓冲
  • Cached, 缓存
  • SwapTotal, 交换内存
  • SwapFree, 空闲交换内存

提供的信息和 free 命令看到的差不多

3. 使用 vmstat 命令

使用 vmstat -s 命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo

示例如下:

  1.  
    [root@centos ~]# vmstat -s
  2.  
    2047268 K total memory
  3.  
    764736 K used memory
  4.  
    1081916 K active memory
  5.  
    476624 K inactive memory
  6.  
    137292 K free memory
  7.  
    96 K buffer memory
  8.  
    1145144 K swap cache
  9.  
    2097148 K total swap
  10.  
    264 K used swap
  11.  
    2096884 K free swap
  12.  
    5536 non-nice user cpu ticks
  13.  
    786 nice user cpu ticks
  14.  
    5935 system cpu ticks
  15.  
    255784 idle cpu ticks
  16.  
    10240 IO-wait cpu ticks
  17.  
    0 IRQ cpu ticks
  18.  
    447 softirq cpu ticks
  19.  
    0 stolen cpu ticks
  20.  
    994434 pages paged in
  21.  
    563680 pages paged out
  22.  
    0 pages swapped in
  23.  
    14 pages swapped out
  24.  
    518532 interrupts
  25.  
    1039207 CPU context switches
  26.  
    1656309212 boot time
  27.  
    59682 forks

最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。

4. 使用 top 命令

top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。

示例输出:

  1.  
    [root@centos ~]# top
  2.  
    top - 14:41:28 up 47 min, 3 users, load average: 0.00, 0.01, 0.09
  3.  
    Tasks: 205 total, 3 running, 202 sleeping, 0 stopped, 0 zombie
  4.  
    %Cpu(s): 0.0 us, 25.0 sy, 0.0 ni, 75.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  5.  
    KiB Mem : 2047268 total, 136552 free, 765188 used, 1145528 buff/cache
  6.  
    KiB Swap: 2097148 total, 2096884 free, 264 used. 1084248 avail Mem
  7.  
     
  8.  
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  9.  
    1 root 20 0 128540 7148 4220 S 0.0 0.3 0:02.66 systemd
  10.  
    2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
  11.  
    4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
  12.  
    6 root 20 0 0 0 0 S 0.0 0.0 0:04.40 ksoftirqd/0
  13.  
    7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
  14.  
    8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
  15.  
    9 root 20 0 0 0 0 R 0.0 0.0 0:02.43 rcu_sched
  16.  
    10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
  17.  
    11 root rt 0 0 0 0 S 0.0 0.0 0:00.26 watchdog/0
  18.  
    13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
  19.  
    14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
  20.  
    15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
  21.  
    16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
  22.  
    17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
  23.  
    18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
  24.  
    19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
  25.  
    20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
  26.  
    21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
  27.  
    22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
  28.  
    23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
  29.  
    24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
  30.  
    30 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kswapd0
  31.  
    31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
  32.  
    32 root 39 19 0 0 0 S 0.0 0.0 0:00.12 khugepaged
  33.  
    33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
  34.  
    41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
  35.  
    43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd

各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。

例如:

  1.  
    # CentOS
  2.  
    top -o %MEM
  3.  
    top -o %CPU
  4.  
     
  5.  
    # mac
  6.  
    top -o mem
  7.  
    top -o cpu


碰到不清楚的,请使用 top -h 查看帮助信息。

重点关注顶部的 KiB Mem 和 KiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。

二、 查看物理内存信息

想要查看物理内存的硬件信息,可以使用 demidecode 命令。
这个命令会输出物理内存相关的信息。

  1.  
    $ dmidecode -t 17
  2.  
     
  3.  
    # dmidecode 3.0
  4.  
    Getting SMBIOS data from sysfs.
  5.  
    SMBIOS 2.8 present.
  6.  
     
  7.  
    Handle 0x1100, DMI type 17, 40 bytes
  8.  
    Memory Device
  9.  
    Array Handle: 0x1000
  10.  
    Error Information Handle: Not Provided
  11.  
    Total Width: Unknown
  12.  
    Data Width: Unknown
  13.  
    Size: 8192 MB
  14.  
    Form Factor: DIMM
  15.  
    Set: None
  16.  
    Locator: DIMM 0
  17.  
    Bank Locator: Not Specified
  18.  
    Type: RAM
  19.  
    Type Detail: Other
  20.  
    Speed: Unknown
  21.  
    Manufacturer: Alibaba Cloud
  22.  
    Serial Number: Not Specified
  23.  
    Asset Tag: Not Specified
  24.  
    Part Number: Not Specified
  25.  
    Rank: Unknown
  26.  
    Configured Clock Speed: Unknown
  27.  
    Minimum Voltage: Unknown
  28.  
    Maximum Voltage: Unknown
  29.  
    Configured Voltage: Unknown

dmidecode -t 17 展示的信息包括 内存大小, 类型,带宽等信息。 当然,因为示例中使用的是虚拟机,所以有的信息是不可用的。

如果不加 -t 参数,则展示所有类型的硬件信息。 也可以指定其他 -t 参数来查看对应的硬件信息

posted @ 2023-07-24 16:43  懒~人  阅读(19)  评论(0编辑  收藏  举报