程序员开发实例大全宝库

网站首页 > 编程文章 正文

Linux常用监控命令总结(几个linux常用的监控工具)

zazugpt 2024-10-21 13:34:05 编程文章 23 ℃ 0 评论

1、IOSTAT命令

此命令安装包为sysstat 可用yum -y install sysstat

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

Linux系统出现了性能问题,一般我们可以通过top.iostat,vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据

iostat结果分析

rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s r/s:每秒完成的读I/O设备次数。即delta(rio)/s w/s:每秒完成的写I/0设备次数。即delta(wio)/s rsec/s:每秒读扇区数。即delta(rsect)/s wsec/s:每秒写扇区数。即delta(wsect)/s rKB/s:每秒读K字节数。是rsec/s的一半,因为每扇区大小为512字节 wKB/s:每秒写K字节数。是wsec/s的一半 avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。即delta(rsect+wsect)/delta(rio+wio) avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒) await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio) svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio) %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(usr)/s/1000(因为use的单位为毫秒) 如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负载,该磁盘可能存在瓶颈。 比较重要的参数 %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 svctm:平均每次设备I/O操作的服务时间 await:平均每次设备I/O操作的等待时间 avgqu-sz:平均I/O队列长度 如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait。 同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O压力高) vmstat -d 5await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有等待时间;如果 await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢。

形象的比喻 r/s+w/s类似于交款人的总数 平均队列长度(avgqu-sz)类似于单位时间里平均排队的人数 平均服务时间(avctm)类似于收银员的收款速度 平均等待时间(await)类似于平均每人的等待时间 平均I/O数据(avgrq-sz)类似于平均每人所买的东西 I/O操作率(%util)类似于收款台前有人排队的时间比例

svctm一般要小于await(因为同时等待的请求的等待时间被重复计算了),svctm的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会 间接导致svctm的增加。await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有 等待时间;如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调 整内核elevator算法,优化应用,或者升级CPU

2、SAR命令

sar命令可以通过参数单独查看系统某个局部的使用情况

sar 命令行的常用格式:

sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式存放在文件中,

file 在此处不是关键字,是文件名。options 为命令行选项,sar命令的选项很多,下面只列出常用选项:

-A:所有报告的总和。-u:CPU利用率-v:进程、I节点、文件和锁表状态。-d:硬盘使用报告。-r:没有使用的内存页面和硬盘块。-g:串口I/O的情况。-b:缓冲区使用情况。-a:文件读写情况。-c:系统调用情况。-R:进程的活动情况。-y:终端设备活动情况。-w:系统交换活动。-n: 记录网络使用情况

默认监控: sar 5 5 // CPU和IOWAIT统计状态 (1) sar -b 5 5 // IO传送速率(2) sar -B 5 5 // 页交换速率(3) sar -c 5 5 // 进程创建的速率(4) sar -d 5 5 // 块设备的活跃信息(5) sar -n DEV 5 5 // 网路设备的状态信息(6) sar -n SOCK 5 5 // SOCK的使用情况(7) sar -n ALL 5 5 // 所有的网络状态信息(8) sar -P ALL 5 5 // 每颗CPU的使用状态信息和IOWAIT统计状态 (9) sar -q 5 5 // 队列的长度(等待运行的进程数)和负载的状态(10) sar -r 5 5 // 内存和swap空间使用情况(11) sar -R 5 5 // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)(12) sar -u 5 5 // CPU的使用情况和IOWAIT信息(同默认监控)(13) sar -v 5 5 // inode, file and other kernel tablesd的状态信息(14) sar -w 5 5 // 每秒上下文交换的数目(15) sar -W 5 5 // SWAP交换的统计信息(监控状态同iostat 的si so)(16) sar -x 2906 5 5 // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上(17) sar -y 5 5 // TTY设备的活动状态(18) 将输出到文件(-o)和读取记录信息(-f)

例1:

在不使用参数的情况下,系统默认打印CPU使用情况

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

在多CPU 系统中,sar命令也可以为每个CPU分解该信息,采用如下命令:sar -u -P ALL 5 5

例2:使用命令 sar -v t n

dentunusd:在缓冲目录条目中没有使用的条目数量.file-nr:被系统使用的文件句柄数量.inode-nr:使用的索引节点数量.pty-nr:使用的pty数量.

例3:使用命令 sar -d t n

DEV 磁盘设备用参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.rd_sec/s:每秒读扇区的次数.wr_sec/s:每秒写扇区的次数.avgrq-sz:平均每次设备I/O操作的数据大小(扇区).avgqu-sz:磁盘请求队列的平均长度.await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.%util:I/O请求占CPU的百分比,比率越大,说明越饱

例4:使用命令 sar -n t n

  

sar提供四种不同的语法选项来显示网络信息。-n选项使用四个不同的开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信 息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,

FULL显示所有三个开关。它们可以单独或者一起使用。

字段 说明 IFACE LAN接口 rxpck/s 每秒钟接收的数据包txpck/s 每秒钟发送的数据包rxbyt/s 每秒钟接收的字节数txbyt/s 每秒钟发送的字节数rxcmp/s 每秒钟接收的压缩数据包txcmp/s 每秒钟发送的压缩数据包rxmcst/s 每秒钟接收的多播数据包 后面的只针对每一个命令做解释,不做

例5: sar -r 5 5 // 内存和swap空间使用情况kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.

例6: sar -B 5 5 // 页交换速率pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)majflt/s:每秒钟产生的主缺页数.pgfree/s:每秒被放入空闲队列中的页个数pgscank/s:每秒被kswapd扫描的页个数pgscand/s:每秒直接被扫描的页个数pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

例7: sar -q 5 5 // 队列的长度(等待运行的进程数)和负载的状态runq-sz:处于运行或就绪的进程数量plist-sz:现在进程的总数(包括线程).ldavg-1:最近一分钟的负载.ldavg-5:最近五分钟的负载.ldavg-15:最近十分钟的负载.平均负载和队列的数据来源于/proc/loadavg

例8: sar -n NFS 5 5 //NFS客户端的监控call/s:每秒成功的RPC调用都会使call/s的值增长,比如对NFS的一次读/写.retrans/s:每秒重传的RPC次数,比如因为服务器的问题,产生timeout,这时客户端需要重新传输.read/s:每秒从NFS服务端读取的次数.write/s:每秒写入到NFS服务端的次数.access/s:每秒访问NFS的次数,比如从NFS服务端COPY文件.getatt/s:每秒获取NFS服务端文件属性的次数,比如ls -l /NFSSERVER/,如果NFSSERVER有300个文件,将产生300次这样的请求.

例9: sar -b 5 5 // IO传送速率tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.rtps:每秒的读请求数wtps:每秒的写请求数bread/s:每秒读磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)bwrtn/s:每秒写磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)一般情况下tps=(rtps+wtps)

sar也可以监控非实时数据,通过cron周期的运行到指定目录下例如:我们想查看本月27日,从0点到23点的内存资源.sa27就是本月27日,指定具体的时间可以通过-s(start)和-e(end)来指定.sar -f /var/log/sa/sa27 -s 00:00:00 -e 23:00:00 -r

关于sar的用法太多太复杂,建议先查看主要几个指标如CPU,内存,IO等(理解起累啊,好难得整理)

3、TOP命令

top命令是下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

TOP前五行统计信息

统计信息区前五行是系统整体的统计信息。

第一行是任务队列信息同 uptime 命令的执行结果:[root@localhost ~]# uptime2:13:31 up 130 days, 17:36, 3 users, load average: 0.20, 0.18, 0.58其内容如下:2:13:31 当前时间up 130 days 系统运行时间,格式为时:天3 user 当前登录用户数load average: 0.20, 0.18, 0.58 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息当有多个CPU时,这些内容可能会超过两行。内容如下:Tasks: 199 total 进程总数1 running 正在运行的进程数194 sleeping 睡眠的进程数0 stopped 停止的进程数4 zombie 僵尸进程数Cpu(s): 0.3% us 用户空间占用CPU百分比1.0% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比98.7% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0% hi0.0% si

第四五行为内存信息。内容如下:Mem: 8178424k total 物理内存总量8133072k used 使用的物理内存总量45352k free 空闲内存总量10604k buffers 用作内核缓存的内存量Swap: 163838892k total 交换区总量194732k used 使用的交换区总量163644160k free 空闲交换区总量6791868k cached 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入

进程信息

列名 含义PID 进程idPPID 父进程idRUSER Real user nameUID 进程所有者的用户idUSER 进程所有者的用户名GROUP 进程所有者的组名TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?PR 优先级NI nice值。负值表示高优先级,正值表示低优先级P 最后使用的CPU,仅在多CPU环境下有意义%CPU 上次更新到现在的CPU时间占用百分比TIME 进程使用的CPU时间总计,单位秒TIME+ 进程使用的CPU时间总计,单位1/100秒%MEM 进程使用的物理内存百分比VIRT 进程使用的虚拟内存总量,单位kbVIRT=SWAP+RESSWAP 进程使用的虚拟内存中,被换出的大小,单位kb。RES 进程使用的、未被换出的物理内存大小,单位kbRES=CODE+DATACODE 可执行代码占用的物理内存大小,单位kbDATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbSHR 共享内存大小,单位kbnFLT 页面错误次数nDRT 最后一次写入到现在,被修改过的页面数。S 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程COMMAND 命令名/命令行WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名Flags 任务标志,参考 sched.h TOP的参数解析

参数: -d : 后面可以接秒数,就是整个程序画面更新的秒数。预设是 5秒; -b : 以批次的方式执行 top ,还有更多的参数可以使用喔! 通常会搭配数据流重导向来将批次的结果输出成为档案。 -n : 与 -b 搭配,意义是,需要进行几次 top 的输出结果。 -p : 指定某些个 PID来进行观察监测而已。 在 top 执行过程当中可以使用的按键指令: ? : 显示在 top 当中可以输入的按键指令; P: 以 CPU的使用资源排序显示; M: 以 Memory 的使用资源排序显示; N: 以 PID来排序喔! T: 由该 Process 使用的 CPU时间累积 (TIME+) 排序。 k : 给予某个 PID一个讯号 (signal) r : 给予某个 PID重新制订一个 nice 值。

范例1:每两秒钟更新一次 [/home/oracle] top -d 2范例2:将结果输出到/tmp/top.txt [/home/oracle] top -b -n 2 > /tmp/top.txt 范例3:假设10218是一个已经存在的pid,观察该进程

top命令一般只用来简单的查看一下cpu和内存使用,看看你自己的进程占用的高不高,另外注意看看那个load averge负载,负载高不高什么的,一般零点几就没什么问题的。而且正常要压力

起来的时候,你的进程的cpu和内存使用会很高的,但如果没有压力他也很高,那就有问题了。 另外的注意看他的内存上涨情况,如果你的进程跑的这段时间,内存一直在涨,注意下会不会有内存泄露问题。

4、VMSTAT命令

vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

2表示每个两秒采集一次服务器状态,5表示只采集5次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

这表示vmstat每2秒采集数据,一直采集,直到我结束程序

好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

1)procs

· r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;

· b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。

2)memory

· swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;

· free列表示当前空闲的物理内存数量(以KB为单位);

· buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;

· cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。

3)swap

· si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;

· so列表示由内存调入磁盘,也就是内存交换区进入内存的数量

· 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。

4)IO

· bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)

· bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒) 这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

5)system

· in列表示在某一时间间隔中观察到的每秒设备中断数;

· cs列表示每秒产生的上下文切换次数。 上面这两个值越大,会看到内核消耗的CPU时间就越多。

6)CPU

. us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。

. sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。

. id列显示了CPU处在空闲状态的时间百分比;

. wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。

. st列一般不关注,虚拟机占用的时间百分比。

 上面的信息主要来自于/proc/meminfo,/proc/stat和/proc/vmstat。

5、FREE命令

监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的就是free命令

第一行(Mem):

· total:内存总数 32872632 KB

· used:已使用的内存数 12393128 KB

· free:空闲的内存数 20479504 KB

· shared:多个进程共享的内存,总是0

· buffers:缓存内存数 23308 KB

· cached:缓存内存数 7496048 KB

第二行(-/+ buffers/cache):

· used:第一行Mem中的 used - buffers - cached = 12393128 - 23308 - 7496048 = 4873772 KB

· free:第一行Mem中的 free + buffers + cached = 20479504 + 23308 + 7496048 = 27998860 KB

· 可见这一行【used-buffers/cache】反映的是被程序实实在在吃掉的内存,【used+buffers/cache】反映的是可以挪用的内存总数。

第三行(Swap):表示交换分区的内存使用状态。

第一行内存状态是对于来说的,buffers/cached 都是属于被使用。

第二行内存状态是对于应用程序来说的,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高程序执行的性能,当应用程序需要用到内存的时候buffers/cached会很快地被回收,以供应用程序使用。

通常我们是从应用的角度来看的,所以只看第二行就行了。

另外,我们可以使用参数-m、-g来以MB、GB单位显示:

6、MPSTAT命令

mpstat(Multiprocessor Statistics,多处理器统计)是实时系统监控工具,它会报告与CPU相关的统计信息,这些信息存放在/proc/stat文件中。

至于各百分比的含义前面已经介绍过了,这里就不再赘述。

其他常用监控命令

网络监控

1、ethtool eth0

使用ethtool查看网卡带宽,需要root权限:

2、SAR

· IFACE:网络设备的名称

· rxpck/s:每秒钟接收到的包数目

· txpck/s:每秒钟发送出去的包数目

· rxkB/s:每秒钟接收到的字节数

· txkB/s:每秒钟发送出去的字节数

3、netstat

netstat命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。

部分选项如下:

常用的几种:

找出程序运行的端口: netstat -ap | grep ssh

找出运行在指定端口的进程: netstat -anp | grep 60010

4、DF

df命令的功能是用来检查的文件系统的磁盘空间占用情况。如果没有文件名被指定,则显示当前所有被挂载的文件系统,默认以 KB 为单位。

常用选项如下:

  最常用的就是$ df -h。

5、PS

ps(Process Status,进程状态)命令是最基本同时也是非常强大的进程查看命令,最常用的命令就是ps aux——显示当前所有进程

ps命令的输出可以按任意某一列进行排序,通过使用内部排序键(列的别名),例如:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表