Linux系统调优——系统整体运行状态排查

Posted diantong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统调优——系统整体运行状态排查相关的知识,希望对你有一定的参考价值。

(1).vmstat

  vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的整体状态值,包括服务器的CPU使用率,MEM内存使用,VMSwap虚拟内存交换情况,IO读写情况。

[root@youxi1 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy  id wa st
 1  0      0 3709568   2108 156248   0    0     1     0   20   18  0  0 100  0  0

说明:

 procs(进程):

  r  展示正在运行和等待运行的进程个数,当这个值超过CPU个数时,就会出现CPU瓶颈。

  b  处在非中断睡眠状态的进程数。即等待IO的进程数量。

 memory(内存):

  swpd  已使用的虚拟内存大小。如果虚拟内存使用较多,可能是系统的物理内存比较吃紧,需要采取合适的方式来减少物理内存的使用。swpd不为0,并不意味物理内存吃紧si、so的值长期为0,这也是没有问题的。

  free  空闲的物理内存的大小

  buff  用来做buffer(缓存,主要用于块设备缓存)的内存数,单位:KB

  cache  用作缓存的内存大小。如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。单位:KB

 swap(交换分区):

  si   从磁盘写入到swap虚拟内存的交换页数量,单位:KB/秒。如果这个值大于0,表示物理内存不够用或者内存泄露了。

  so  从swap虚拟内读出的数据。即从swap中的数据写入到磁盘的交换页数量,单位:KB/秒,如果这个值大于0,表示物理内存不够用或者内存泄露了。

  注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。   当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合si和so。如果free很少,但是si和so是0,那么不用担心,系统性能这时不会受到影响的。

 io(这里指进出内存的数据):

  bi  每秒从块设备接收到的块数,单位:块/秒 也就是读块设备。bi通常是读磁盘的数据

  bo  每秒发送到块设备的块数,单位:块/秒  也就是写块设备。bo通常是写磁盘的数据

 system(系统):

  in  每秒的中断数,包括时钟中断。

  cs  每秒的环境(上下文)切换次数。比如我们调用系统函数,就要进行上下文切换,而过多的上下文切换会浪费较多的cpu资源,这个数值应该越小越好。

 cpu(使用cpu时间的百分比,最大100%):

  us  用户CPU时间(非内核进程占用时间)(单位为百分比)。 us的值比较高时,说明用户进程消耗的CPU时间多

  sy  系统使用的CPU时间(单位为百分比)。sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

  id  空闲的CPU的时间(百分比),在Linux 2.5.41之前,这部分包含IO等待时间。

  wa  等待IO的CPU时间,这个值为0 .这个指标意味着CPU在等待硬盘读写操作的时间,用百分比表示。wait越大则机器io性能就越差。说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

  st  虚拟机占用cpu时间的百分比。如果centos系统上运行了kvm虚拟机,而kvm虚拟上又运行了几个虚拟机,那么这个值将显示这个几个正在运行的虚拟机从物理机中窃取CPU运行时间的百分比。

1)CPU利用率比例分配

  us——用户态——65%~70%

  sy——内核态——30%~35%

  id——空闲——0%~5%

  cs——Context Switches:上下文切换的数目直接关系到CPU 的使用率,如果CPU 利用率保持在上述均衡状态时,有大量的上下文切换是正常的。(上下文切换指的就是cpu中寄存器数据的写入和读出。每个进程在使用cpu时,都需要把自己的数据先写入cpu的缓存(寄存器)中,然后cpu才能根据缓存中的数据来计算。)

2)指定刷新时间间隔,连续输出

[root@youxi1 ~]# vmstat 1 10  //时间间隔1秒,连输输出10次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy  id wa st
 1  0      0 1778088   2108 125992   0    0     5     0   73   76  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  277  277  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  279  281  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     4  327  331  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  275  283  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  270  277  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  268  273  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     0  275  287  0  0 100  0  0
 0  0      0 1778088   2108 126024   0    0     0     1  251  268  0  0 100  0  0
 0  0      0 1778088   2108 126028   0    0     0     0  274  295  0  0 100  0  0

  用来连续查看系统整体运行状态,主要可以注意查看r、free、si、so、bi、bo、us、id、wa(wa大于40%就要查看bi、bo情况了)。

(2).sar

  sar命令需要安装sysstat工具包。sysstat工具包可以把检查到的信息保存下来,存在/var/log/sa目录下。sar 默认显示每10分钟统计一次状态信息(从装sysstat包开始)。

[root@youxi1 ~]# yum -y install sysstat

1)命令格式

  sar [ 选项 ] [ <时间间隔> [ <次数> ] ]

  如果有时间间隔和次数则显示当前的情况,如果没有则显示今日的所有情况。

2)选项

  常用选项

-A:所有报告的总和,相当于选项-bBdFHqrRSuvwWy -I SUM -I XALL -m ALL  -n  ALL  -u ALL -P ALL
-d:显示磁盘的情况
-f [文件名]:查看由-o [文件名]创建的文件,文件名默认参数是当前的每日数据文件/var/log/sa/sadd
-n <关键词>:显示网络的情况,关键字可以是DEV、EDEV、NFS、NFSD、SOCK、IP、EIP、ICMP、EICMP、TCP、ETCP、UDP、SOCK6、IP6、EIP6、ICMP6、EICMP6、UDP6
-o [文件名]:以二进制形式保存正在读取得数据,文件名默认参数是当前的每日数据文件/var/log/sa/sadd
-u [ALL]:显示CPU情况,如果指定ALL,则显示所有参数。

  有可能用到的选项

-b:缓冲区使用情况
-c:每秒创建进程的个数
-v:进程、节点、文件和锁表状态
-r:内存使用情况(详细)
-R:内存使用情况
-y:终端设备活动情况
-W:swap(交换内存)情况
-P [ALL | CPU编号]:查看指定cpu使用情况
-w:任务创建和系统切换情况

3)实例

  每2秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件cpu.sar中。

[root@youxi1 ~]# sar -u 2 5 -o cpu.sar
Linux 3.10.0-957.el7.x86_64 (youxi1)    2019年08月04日  _x86_64_        (4 CPU)

01时30分28秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
01时30分30秒     all      0.00      0.00      0.25      0.00      0.00     99.75
01时30分32秒     all      0.00      0.00      0.00      0.00      0.00    100.00
01时30分34秒     all      0.00      0.00      0.12      0.00      0.00     99.88
01时30分36秒     all      0.00      0.00      0.00      0.00      0.00    100.00
01时30分38秒     all      0.00      0.00      0.00      0.00      0.00    100.00
平均时间:     all      0.00      0.00      0.08      0.00      0.00     99.92

说明:

输出项 详细说明
CPU all 表示统计信息为所有 CPU 的平均值。
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。

  在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

  回头查看保存的文件

[root@youxi1 ~]# sar -u -f cpu.sar
Linux 3.10.0-957.el7.x86_64 (youxi1)    2019年08月04日  _x86_64_        (4 CPU)

01时30分28秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
01时30分30秒     all      0.00      0.00      0.25      0.00      0.00     99.75
01时30分32秒     all      0.00      0.00      0.00      0.00      0.00    100.00
01时30分34秒     all      0.00      0.00      0.12      0.00      0.00     99.88
01时30分36秒     all      0.00      0.00      0.00      0.00      0.00    100.00
01时30分38秒     all      0.00      0.00      0.00      0.00      0.00    100.00
平均时间:     all      0.00      0.00      0.08      0.00      0.00     99.92

4)查看sar的计划任务,并读取日志

  查看sar的计划任务

[root@youxi1 ~]# cat /etc/cron.d/sysstat
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1  //每10分钟生成一次
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

  读取日志

[root@youxi1 ~]# ls /var/log/sa  //查看日志文件
sa03  sa04  sar03
[root@youxi1 ~]# sar -n DEV -f /var/log/sa/sa04  //读取指定日志文件的DEV情况
Linux 3.10.0-957.el7.x86_64 (youxi1)    2019年08月04日  _x86_64_        (4 CPU)

00时00分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
00时10分01秒        lo      9.89      9.89      4.17      4.17      0.00      0.00      0.00
00时10分01秒     ens33      0.04      2.02      0.01      0.12      0.00      0.00      0.00
00时20分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
00时20分01秒     ens33      0.06      2.03      0.01      0.14      0.00      0.00      0.00
00时30分01秒        lo      9.90      9.90      4.16      4.16      0.00      0.00      0.00
00时30分01秒     ens33      0.12      2.09      0.01      0.19      0.00      0.00      0.00
00时40分01秒        lo      9.86      9.86      4.16      4.16      0.00      0.00      0.00
00时40分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
00时50分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
00时50分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
01时00分01秒        lo      9.91      9.91      4.16      4.16      0.00      0.00      0.00
01时00分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
01时10分01秒        lo      9.91      9.91      4.17      4.17      0.00      0.00      0.00
01时10分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
01时20分01秒        lo      9.91      9.91      4.16      4.16      0.00      0.00      0.00
01时20分01秒     ens33      0.01      2.01      0.00      0.12      0.00      0.00      0.00
01时30分01秒        lo      9.83      9.83      4.19      4.19      0.00      0.00      0.00
01时30分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
01时40分01秒        lo      9.94      9.94      4.17      4.17      0.00      0.00      0.00
01时40分01秒     ens33      0.08      2.06      0.01      0.12      0.00      0.00      0.00
01时50分01秒        lo      9.88      9.88      4.15      4.15      0.00      0.00      0.00
01时50分01秒     ens33      0.01      2.01      0.00      0.12      0.00      0.00      0.00
02时00分01秒        lo      9.86      9.86      4.16      4.16      0.00      0.00      0.00
02时00分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
平均时间:        lo      9.89      9.89      4.16      4.16      0.00      0.00      0.00
平均时间:     ens33      0.04      2.02      0.00      0.13      0.00      0.00      0.00

11时52分01秒       LINUX RESTART

12时00分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
12时10分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
12时10分01秒     ens33      0.21      2.20      0.02      0.16      0.00      0.00      0.00
12时20分01秒        lo      9.91      9.91      4.16      4.16      0.00      0.00      0.00
12时20分01秒     ens33      0.38      2.31      0.03      0.28      0.00      0.00      0.00
12时30分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
12时30分01秒     ens33      0.07      2.06      0.01      0.15      0.00      0.00      0.00
12时40分01秒        lo      9.92      9.92      4.16      4.16      0.00      0.00      0.00
12时40分01秒     ens33      0.97      2.88      0.09      0.57      0.00      0.00      0.00
12时50分01秒        lo      9.91      9.91      4.16      4.16      0.00      0.00      0.00
12时50分01秒     ens33      0.31      2.27      0.02      0.33      0.00      0.00      0.00
13时00分01秒        lo      9.94      9.94      4.17      4.17      0.00      0.00      0.00
13时00分01秒     ens33      0.03      2.02      0.00      0.12      0.00      0.00      0.00
13时10分01秒        lo      9.92      9.92      4.16      4.16      0.00      0.00      0.00
13时10分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
13时20分01秒        lo      9.92      9.92      4.16      4.16      0.00      0.00      0.00
13时20分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
13时30分01秒        lo      9.92      9.92      4.16      4.16      0.00      0.00      0.00
13时30分01秒     ens33      0.13      2.09      0.01      0.13      0.00      0.00      0.00
13时40分01秒        lo      9.92      9.92      4.16      4.16      0.00      0.00      0.00
13时40分01秒     ens33      0.06      2.04      0.00      0.12      0.00      0.00      0.00
13时50分01秒        lo      9.89      9.89      4.16      4.16      0.00      0.00      0.00
13时50分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
14时00分01秒        lo      9.90      9.90      4.16      4.16      0.00      0.00      0.00
14时00分01秒     ens33      0.02      2.02      0.00      0.12      0.00      0.00      0.00
14时10分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
14时10分01秒     ens33      0.02      2.01      0.00      0.12      0.00      0.00      0.00
平均时间:        lo      9.91      9.91      4.16      4.16      0.00      0.00      0.00
平均时间:     ens33      0.17      2.15      0.02      0.19      0.00      0.00      0.00

  sar最大特点是可以监控所有状态,还可以查看摸个时间段的运行情况

[root@youxi1 ~]# sar -s 12:00:00 -e 12:20:00 -f /var/log/sa/sa04
Linux 3.10.0-957.el7.x86_64 (youxi1)    2019年08月04日  _x86_64_        (4 CPU)

12时00分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
12时10分01秒     all      0.01      0.00      0.05      0.01      0.00     99.94
平均时间:     all      0.01      0.00      0.05      0.01      0.00     99.94
[root@youxi1 ~]# sar -s 12:00:00 -e 12:20:00 -f /var/log/sa/sa04 -n DEV
Linux 3.10.0-957.el7.x86_64 (youxi1)    2019年08月04日  _x86_64_        (4 CPU)

12时00分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
12时10分01秒        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
12时10分01秒     ens33      0.21      2.20      0.02      0.16      0.00      0.00      0.00
平均时间:        lo      9.88      9.88      4.16      4.16      0.00      0.00      0.00
平均时间:     ens33      0.21      2.20      0.02      0.16      0.00      0.00      0.00

  

 

 

 

参考:每天一个linux命令:vmstat

  https://blog.csdn.net/volitationlong/article/details/81741754

以上是关于Linux系统调优——系统整体运行状态排查的主要内容,如果未能解决你的问题,请参考以下文章

性能调优

Linux系统 MySQL 运行状态及调优

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

Linux性能调优一观大局:系统平均负载load average

linux 性能调优 平均负载

JVM学习笔记4:JVM基本参数调优