物理内存使用率高(物理内存使用率多少正常)
工作中总会碰到几次要分析机器历史问题的需求,之前没有系统化的整理过,也没有深入的去理解那些排查系统性能工具的指标输出,导致在遇上这种需求的时候,总是心虚,能搪塞过去就搪塞过去,不过随着工作年限的增加,遇到这种需求,再说不出个123来,就配不上工牌上那“高级运维工程师”几个字了。这篇文章,就来拆解下这个linux历史问题排查神器-sar命令 。
如果你的系统没有安装sysstat这个包,那么是没有sar命令的,也不会有可分析的文件,需要执行命令yum -y install sysstat去安装,安装完成后,就有sar命令了。同时也会自动生成相关目录及计划任务/etc/cron.d/sysstat。
sar常用命令
假设你要全面的分析系统指标,又没有足够的耐心将这篇文章看完,想着现学现卖,那么直接执行下面的命令,然后去看系统输出的各项指标吧,看不懂的,就来这个页面搜索下指标名称,就可以找到对应的解释,如果文章中没有解释,那就需要去文章开头附的参考资料中寻找答案了。
万能的sar命令如下:
# 输出26日的20:00:01到23:00:01之间的所有报告$ sar -f sa26 -A -s 20:00:01 -e 23:00:01 | less# 每隔3s打印下当前系统的所有性能指标并输出到/tmp/sar_3.log文件中$ sar -A 3 >> /tmp/sar_3.log
各选项如下:
-f:指定要分析的文件sa文件,默认保留近三十天的,文件名格式:sa[日期],如1号的就是sa1,15号的就是sa15,不过建议使用stat命令查一下文件最近改动时间,比如sa15,查出来的可能是上个月15号的日志,等到这个月16号,再看sa15这个文件,那么文件最近改动时间,就是当月的15号了,上月的已经被删除了。在分析之前,一定要先确认自己分析的文件没错哦,别分析了半天,看的不是你想看的那天的,那就尴尬了。
-A:输出全部的性能指标,包括磁盘、系统平均负载、内存、网卡流量等等,如果想单独输出某方面的指标,需要加其他选项,这个后面细说。
-s:指定要输出的报告起始时间,上面的命令是输出20:00:01之后的。
-e:指定要输出的报告截止时间,上面的命令是输出23:00:01之前的。
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息
CPU相关指标
# 输出26号,20:00:00到22:00:00,CPU相关的指标(-P ALL:输出每个核心的详细指标信息)
$ sar -f sa26 -u -P ALL -u ALL -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:
CPU:表示当前是哪个CPU,all表示所有cpu的指标平均值。%usr:CPU在用户模式下,执行进程的时间百分比 。%nice:CPU处在带NICE值的用户模式下的时间百分比。%system: CPU处在系统模式(内核态)下,执行进程的时间百分比。%iowait:CPU用于等待I/O操作完成(等待输入输出完成),占用CPU总时间的百分比,如果此值过高,表示硬盘存在I/O瓶颈 。%steal:管理程序为另一个虚拟进程提供服务而等待虚拟CPU的百分比。%irq:CPU服务硬件中断(简称硬中断)所花费的时间百分比。%soft:CPU服务软件中断(简称软中断)所花费的时间百分比。%guest:CPU运行虚拟处理器所花费的时间百分比。%gnice:Percentage of time spent by the CPU or CPUs to run a niced guest.%idle:CPU空闲时间百分比,如果此值过高,表示CPU较空闲。如果此值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应查看内存使用,必要时需要加大内存容量 ,如果此值持续低于10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。任务创建和系统切换活动相关
# 输出26号,20:00:00到22:00:00,任务创建和系统切换活动相关指标$ sar -f sa26 -w -s 20:00:00 -e 22:00:00
各项指标解释如下:
proc/s:每秒创建的总任务数
cswch/s:每秒上下文切换的总数。
系统负载相关
# 输出26号,20:00:00到22:00:00,进程队列长度和平均负载状态的指标$ sar -f sa26 -q -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:
runq-sz :运行队列的长度,等待运行的进程数量
plist-sz:进程列表中进程和线程的数量
ldavg-1 :最后1分钟的系统平均负载
ldavg-5 :过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
blocked:当前阻塞的等待I/O完成的任务数。
内存统计信息相关
# 输出26号,20:00:00到22:00:00,内存统计信息相关的指标$ sar -f sa26 -R -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:frmpg/s:系统每秒释放的内存页数。负数表示系统分配的页面数。注意,根据机器的体系结构,页面的大小为4 kB或8 kB。bufpg/s:每秒系统用作缓冲区的额外内存页数。负值意味着系统使用更少的页作为缓冲区。campg/s:系统每秒缓存的额外内存页数。负值意味着缓存中的页面更少。内存和交换空间相关
# 输出26号,20:00:00到22:00:00,内存和交换空间相关的指标$ sar -f sa26 -r -u ALL -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:
kbmemfree:空闲的内存数量(单位为KB),这个值和free命令中的free值基本一致,不包括buffer和cache的空间。
kbmemused:已使用的内存数量,不包含内核使用的内存(单位为KB)。这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间。
%memused:已使用内存的百分数。物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比。
kbbuffers:内核缓冲区buffer,使用的内存数量(单位为KB)。这个值就是free命令中的buffer。
kbcached:内核高速缓存cache数据使用的内存数量(单位为KB)。这个值就是free命令中的cache。
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比。
kbactive:以KB为单位的活动内存数量(最近使用的内存,除非绝对必要,通常不会回收)。
kbinact:非活动内存的数量(以KB为单位)(最近使用较少的内存)。
kbdirty:等待“写回磁盘”的以KB为单位的内存量。
系统交换活动相关信息
# 输出26号,20:00:00到22:00:00,系统交换活动相关的指标$ sar -f sa26 -W -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:pswpin/s:每秒系统换入的交换页面(swap page)数量pswpout/s:每秒系统换出的交换页面(swap page)数量内存分页相关
# 输出26号,20:00:00到22:00:00,内存和交换空间相关的指标$ sar -f sa26 -B -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:
pgpgin/s:每秒从磁盘空间或交换空间置换到内存的字节数(单位为KB)。
pgpgout/s:每秒从内存置换到磁盘空间或交换空间的字节数(单位为KB)。
fault/s:每秒钟系统产生的缺页数(主缺页加次缺页)。
majflt/s:每秒钟产生的主缺页数。
pgfree/s:每秒被放入空闲队列中的页个数。
pgscank/s:每秒被kswapd扫描的页个数。
pgscand/s:每秒直接被扫描的页个数。
pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数。
%vmeff:每秒清除的页占总扫描页的百分比。
网络设备统计相关
# 输出26号,20:00:00到22:00:00,eth0这块网卡的网络设备统计相关的指标# 省略egrep的话,输出所有网卡,也可以egrep中填入多块网卡名称,| 分隔即可$ sar -f sa26 -n DEV -s 20:00:00 -e 22:00:00 | egrep 'eth0|IFACE'
输出的各项指标含义如下:
IFACE:网络设备名。
rxpck/s:每秒接收的包数量。
txpck/s:每秒传输的包数量。
rxbyt/s:每秒接收的字节数(单位为byte)。
txbyt/s:每秒传输的字节数(单位为byte)。
rxkB/s:每秒收的数据量(单位为kB)。
txkB/s:每秒发的数据量(单位为kB)。
rxcmp/s:每秒接收压缩包的数量。
txcmp/s:每秒传输压缩包的数量。
rxmcst/s:每秒接收的多播(multicast)包的总数排查网络设备故障。
网络设备故障相关
# 输出26号,20:00:00到22:00:00,eth0这块网卡的故障相关的指标(省略egrep的话,输出所有网卡,也可以egrep中填入多块网卡名称,| 分隔即可)$ sar -f sa26 -n EDEV -s 20:00:00 -e 22:00:00 | egrep 'eth0|IFACE'
输出的各项指标含义如下:
IFACE:网络设备名。
rxerr/s:每秒接收的坏包数量。
txerr/s:传输包时每秒发生错误的数量。
coll/s:传输包时每秒发生冲突的数量。
rxdrop/s:接收包时,每秒丢弃的包的数量(缺乏缓存导致)。
txdrop/s:传输包时,每秒丢弃的包的数量(缺乏缓存导致)。
txcarr/s:传输包时,每秒发生的传输错误的数量。
rxfram/s:接收包时,每秒发生帧校验错误的数量。
rxfifo/s:接收包时,每秒钟缓冲区溢出错误的数量。
txfifo/s:传输包时,每秒钟缓冲区溢出错误的数量。
I/O和传送速率
# 输出26号,20:00:00到22:00:00,机器上所有I/O和传送速率相关指标$ sar -f sa26 -b -s 20:00:00 -e 22:00:00
输出的各项指标含义如下:
tps:每每秒向磁盘设备请求数据的次数,包括读、写请求,其为rtps与wtps的和。每一次IO下发后会先将多个请求合并为一个I/O磁盘请求,这里tps指请求合并后的请求计数
rtps:每秒向磁盘设备的读请求次数
wtps:每秒向磁盘设备的写请求次数
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
磁盘相关
# 输出26号,20:00:00到22:00:00,机器上所有磁盘的使用相关指标
$ sar -f sa26 -d -p -s 20:00:00 -e 22:00:00
# -p:打印设备的名字。此选项与选项-d一起使用。默认不加-p的话情况下,名称打印为dev m-n,
# 其中m和n为设备的主号码和副号码。使用-p选项将显示设备名,易读性更高。
# 设备的主号码和副号码可以通过lsblk命令(输出的MAJ:MIN列,就是主号码和副号码)查看。
输出的各项指标含义如下:
DEV:磁盘设备,加上用参数-p可以打印出sda等磁盘设备名称;如不加参数-p,设备则显示为dev253-0等。
tps:每秒向磁盘设备请求数据的次数,包括读、写请求,其为rtps与wtps的和。
每一次IO下发后会先将多个请求合并为一个I/O磁盘请求,这里tps指请求合并后的请求计数。rd_sec/s:每秒读扇区的次数。
wr_sec/s:每秒写扇区的次数。
avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。
avgqu-sz:磁盘请求队列的平均长度。
await:从请求磁盘到系统处理完,每次请求的平均消耗时间,包括请求队列等待时间(单位是毫秒)。
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间。man手册中提示该字段将在将来的sysstat版本中删除。不要相信这个指标了。
%util:I/O请求占CPU的百分比。man手册解释:Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.
如发现本站有涉嫌抄袭侵权/违法违规等内容,请<举报!一经查实,本站将立刻删除。