🗒 Linux 系统监控
Posted 万隆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了🗒 Linux 系统监控相关的知识,希望对你有一定的参考价值。
你有可能是系统上线后,或者闲来无聊看到我的
Sar
sar命令的常用格式如下。
sar[options...][[]]
sar如果不加参数,则默认是读取历史统计信息,你可以指定interval和count对当前的系统活动进行统计。其中参数的具体说明如下。
interval为采样间隔,
count为采样次数,默认值是1。
options为命令行选项,sar命令常用的选项分别如下
-A:所有报告的总和。
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息,一般添加选项p以显示易读的设备名
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-c:输出进程的统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备的活动情况
-w:输出系统交换活动的信息,即每秒上下文切换次数。
比如我想 每两秒看一下吊 cpu使用率 看特么10次
[root@izuqum7340lw96z conf]# sar -u 2 10 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月04日 _x86_64_ (1 CPU) 21时30分05秒 CPU %user %nice %system %iowait %steal %idle 21时30分07秒 all 10.55 0.00 12.06 0.00 0.00 77.39 21时30分09秒 all 11.56 0.00 15.08 0.00 0.00 73.37 21时30分11秒 all 7.54 0.00 10.55 0.00 0.00 81.91 21时30分13秒 all 7.00 0.00 6.50 0.00 0.00 86.50 21时30分15秒 all 14.07 0.00 17.09 0.00 0.00 68.84
输出项说明如下
CPU:all表示统计信息为所有CPU的平均值。我们可以使用sar -Pn查看某颗CPU。
%user:显示在用户级别运行和使用CPU总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%system:在核心级别(kernel)运行所占用CPU总时间的百分比。
%iowait:显示用于等待I/O操作所占用CPU总时间的百分比。
%idle:显示CP
U空闲时间所占用CPU总时间的百分比。
1)若%iowait的值过高,则表示硬盘存在I/O瓶颈。
2)若%idle的值很高但系统响应很慢时,有可能是CPU正在等待分配内存,此时应加大内存容量。
3)若%idle的值持续低于10,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
进行网络统计
语
法是sar -n KEYWORD
KEYWORD常用的值及说明具体如下:
DEV:显示网络设备统计,如eth0、eth1等。
EDEV:显示为网络设备错误统计。
NFS:显示NFS客户端活动统计。
ALL:显示所有统计信息。
比如我特么想一秒看一下 网络看特么吊10次
[root@izuqum7340lw96z conf]# sar -n DEV 1 10 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月04日 _x86_64_ (1 CPU) 21时44分18秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 21时44分19秒 eth0 68.69 57.58 5.53 5.13 0.00 0.00 0.00 21时44分19秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21时44分19秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 21时44分20秒 eth0 44.55 39.60 3.39 3.56 0.00 0.00 0.00 21时44分20秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21时44分20秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 21时44分21秒 eth0 70.00 61.11 5.48 5.46 0.00 0.00 0.00 21时44分21秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明:
第一字段:时间。
IFACE:设备名。
rxpck/s:每秒收到的包。
txpck/s:每秒传输的包。
rxbyt/s:每秒收到的所有包的体积。
txbyt/s:每秒传输的所有包的体积。
rxcmp/s:每秒收到的数据切割压缩的包的总数。
txcmp/s:每秒传输的数据切割压缩的包的总数。
rxmcst/s:每秒收到的多点传送的包。
可以使用grep命令对输出进行过滤,命令如下。
sar -n DEV 1 10| grep eth1(网卡名称)
内存分页监控
sar -B 1 10
每1s采样一次,连续采样10次,监控内存分页,命令及输出结果如下。
[root@izuqum7340lw96z ~]# sar -B 1 10 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月04日 _x86_64_ (1 CPU) 21时52分00秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 21时52分01秒 0.00 88.89 68477.78 0.00 28548.48 0.00 0.00 0.00 0.00 21时52分02秒 0.00 4.00 15165.00 0.00 4867.00 0.00 0.00 0.00 0.00 21时52分03秒 0.00 4.04 16548.48 0.00 5253.54 0.00 0.00 0.00 0.00 21时52分04秒 0.00 7.92 70968.32 0.00 21700.99 0.00 0.00 0.00 0.00
输出项说明如下
pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major+minor)
majflt/s:每秒钟产生的主缺页数,这会导致将数据从磁盘加载到内存,因此需要留意
I/O和传送速率监控
例如,每1s采样一次,连续采样10次,需要键入如下命令。
[root@izuqum7340lw96z ~]# sar -b 1 10 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月04日 _x86_64_ (1 CPU) 21时54分54秒 tps rtps wtps bread/s bwrtn/s 21时54分55秒 7.07 0.00 7.07 0.00 218.18 21时54分56秒 2.00 0.00 2.00 0.00 16.00 21时54分57秒 1.00 0.00 1.00 0.00 8.00
输出项说明如下。
tps:每秒钟物理设备的I/O传输总量。
rtps:每秒钟从物理设备读入的数据总量。
wtps:每秒钟向物理设备写入的数据总量。
bread/s:每秒钟从物理设备读入的数据量,单位为块/s。
bwrtn/s:每秒钟向物理设备写入的数据量,单位为块/s。
查看历史统计信息
有时我们希望能够看到历史性能统计信息,可以进入目录/var/log/sa,使用sar –f sa XX命令查看历史数据,例如,
[root@izuqum7340lw96z sa]# sar -f sa01 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月01日 _x86_64_ (1 CPU) 00时00分01秒 CPU %user %nice %system %iowait %steal %idle 00时10分01秒 all 0.93 0.00 0.35 0.22 0.00 98.50 00时20分02秒 all 0.92 0.00 0.32 0.11 0.00 98.64 00时30分01秒 all 0.95 0.00 0.33 0.12 0.00 98.59 00时40分01秒 all 0.97 0.00 0.38 0.25 0.00 98.40 00时50分01秒 all 0.91 0.00 0.32 0.09 0.00 98.67 01时00分01秒 all 0.94 0.00 0.32 0.04 0.00 98.70 01时10分01秒 all 0.95 0.00 0.35 0.39 0.00 98.31 01时20分01秒 all 0.94 0.00 0.32 0.13 0.00 98.62
默认将显示整天的数据。我们可以加上s选项指定特定时间段的数据,例如
[root@izuqum7340lw96z sa]# sar -q -f sa01 -s 10:00:00 |head -n 10 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月01日 _x86_64_ (1 CPU) 10时00分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10时10分01秒 1 244 0.03 0.04 0.05 0 10时20分02秒 1 244 0.00 0.01 0.05 0 10时30分01秒 2 243 0.01 0.02 0.05 0 10时40分01秒 2 244 0.00 0.01 0.05 0 10时50分01秒 1 244 0.00 0.03 0.05 0 11时00分01秒 2 244 0.00 0.01 0.05 0 11时10分01秒 1 245 0.00 0.01 0.05 0
iostat
iostat是I/Ostatistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动的统计情况,同时也将汇报出CPU的使用情况。iostat有一个弱点,那就是它不能对某个进程进行深入分析,只能对系统的整体情况进行分析。
参数及说明分别如下。
·t:打印汇报的时间。
·x:默认显示所有设备。
·m:统计信息显示每秒多少MB而不是默认的每秒多少块。
1秒输出一次
[root@izuqum7340lw96z sa]# iostat -x sda 1 Linux 3.10.0-957.27.2.el7.x86_64 (izuqum7340lw96z) 2020年07月04日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.26 0.00 1.95 0.05 0.00 95.73 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util avg-cpu: %user %nice %system %iowait %steal %idle 21.78 0.00 21.78 0.99 0.00 55.45
vmstat
vmstat这个工具提供了系统整体性能的报告,它能对进程、内存、页交换、I/O、中断及CPU使用情况进行统计并报告信息。vmstat的输出类似如下。
[root@izuqum7340lw96z sa]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 126508 35996 933016 0 0 8 19 126 231 2 2 96 0 0
(1)procs部分r:表示当前有多少进程正在等待运行,如果r是连续的大于在系统中的CPU的个数,则表示系统现在运行得比较慢,有多数的进程正在等待CPU。b:表示当前有多少进程被阻塞。
(2)memory部分swpd、free、buff、cache这4项展示了内存是如何使用的,swap列显示了swap被使用的数量,free列显示了目前空闲的内存,buffer列显示了buffer所使用的内存,cache列显示了pagecache所使用的内存,cache越大,表明有越多的内存用于cache文件。
(3)swap部分si:每秒从磁盘交换到swap的内存。so:每秒从swap交换到磁盘的内存。si、so正常情况下应该等于0,如果持续不为0,那么很可能存在性能问题。
(4)io部分
bi:从块设备读入数据的总量(读磁盘)。bo:块设备写入数据的总量(写磁盘)。bi、bo的变化反映了我们 磁盘读取和写入的速率。
(5)system部分in:每秒中断次数,包括时钟。cs:每秒上下文切换次数。
(6)CPU部分这些列展示了不同CPU完成不同任务的CPU时间百分比。我们由此可以得知,CPU是否真正在做事,还是处于空闲或等待状态。很高的sy值,表明可能有过多的系统调用或系统调用效率不高。·us:运行非内核代码所花费的时间百分比,即进程在用户态使用的CPU时间百分比。·sy:运行内核代码所花费的时间百分比,即进程在系统态使用的CPU时间百分比。·id:空闲的CPU时间百分比。·wa:等待I/O的CPU时间百分比。·st:从虚拟机偷取的CPU时间百分比。
Free
free命令用于显示系统的自由内存和已经被使用的内存。
free指令显示的内存的使用情况包括实体内存、虚拟的交换文件内存、共享内存区段及系统核心使用的缓冲区等。
语法:free[-bkmotV][-s]
参数及说明分别如下。
·b:以Byte为单位显示内存使用情况。
·k:以KB为单位显示内存使用情况。
·m:以MB为单位显示内存使用情况。
·o:不显示缓冲区调节列。
·s:持续观察内存使用状况。
·t:显示内存总和列。
Top
能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。它不断更新最新情况直至用户结束程序。默认情况下,可列出消耗CPU资源最多的十多个进程。你也可以交互式地键入不同的键按其他选项进行排序,比如按【M】键可列出占用最多内存的几个进程,按【1】键可切换显示各CPU的使用率或整体使用率等,按【K】键可终止某个进程,按空格键可重新刷新屏幕输出。
其中各参数及说明分别如下。
-b批处理模式操作。-d:刷新时间间隔。-n:交互次数,即输出几次。
如下例子可指定某个或某几个进程的top输出。
如下例子可指定某个或某几个进程的top输出
[root@izuqum7340lw96z sa]# top -p 15810,12333
如下例子可指定某个用户的top输出。
[root@izuqum7340lw96z sa]# top -u redis
netstat
netstat命令用于显示各种网络相关的信息。常见的参数及说明分别如下。·a:all,显示所有选项,默认不显示LISTEN相关。
·t:tcp,仅显示TCP相关选项
·u:udp,仅显示UDP相关选项。
·n:不显示别名,能显示为数字的全部转化成数字。
·l:仅列出有正在Listen(监听)的服务状态。
·p:显示建立相关链接的程序名。
·r:显示路由信息,路由表。
·e:显示扩展信息,例如uid等。
·s:按各个协议进行统计。
·c:每隔一个固定时间,执行该netstat命令。下面将列举几个示例进行说明。我们可以使用netstattlpn显示当前正在监听TCP协议端口的mysql服务。以下命令将每隔一秒输出一次网络信息,检测MySQL服务是否已经起来并监听端口了。
以下命令将每隔一秒输出一次网络信息,检测MySQL服务是否已经起来并监听端口了。
[root@izuqum7340lw96z sa]# netstat -tlpnc |grep mysql tcp6 0 0 :::3306 :::* LISTEN 2271/mysqld tcp6 0 0 :::3306 :::* LISTEN 2271/mysqld
strace
strace是一个简单易用的工具,用于跟踪一个进程的系统调用或信号产生的情况,它最简单的用法就是跟踪一个可执行文件的执行,记录程序运行过程中的系统调用。通过使用参数c,它还能对进程中所有的系统调用做一个统计分析。它也能筛选出特定的系统调用,以下是一些示例。
1)查找程序启动的时候加载了哪些配置文件。
[root@izuqum7340lw96z sa]# strace php 2>&1 |grep php.ini open("/www/server/php/72/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory) open("/www/server/php/72/etc/php.ini", O_RDONLY) = 3
可以查看加载了哪个php.ini文件
雨雀地址
https://www.yuque.com/yuanminghang/ex83zv/oh1nsg
以上是关于🗒 Linux 系统监控的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段