Linux命令性能监控分析

Linux性能监控分析

 

Linux性能测试指标评估

https://blog.51cto.com/364879551/2095709

超全整理!Linux性能分析工具汇总合集

https://www.cnblogs.com/tcicy/p/8461807.html

Linux系统性能10条命令监控

https://www.cnblogs.com/qmfsun/p/5729442.html

18个监控网络带宽的工具

https://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247487745&idx=1&sn=885338d2c6cb9392cda5fa923e162be3&chksm=e91b741dde6cfd0bd60c53d89b54e51f3ea6f5abd2923af771b412563c5298fb5c5b4f767d01&mpshare=1&scene=1&srcid=1211yP0i3zNx4btmwsSf2tpk#rd

 一、影响Linux服务器性能的因素

  1. 操作系统级

  · CPU

  · 内存

  · 磁盘I/O带宽

  · 网络I/O带宽

  2. 程序应用级

  二、系统性能评估标准

  影响性能因素

  其中:

  %user:表示CPU处在用户模式下的时间百分比。

  %sys:表示CPU处在系统模式下的时间百分比。

  %iowait:表示CPU等待输入输出完成时间的百分比。

  swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM

  swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。

  三、系统性能分析工具

  1.常用系统命令

  Vmstat、sar、iostat、netstat、free、ps、top等

  2.常用组合方式

  用vmstat、sar、iostat检测是否是CPU瓶颈

  用free、vmstat检测是否是内存瓶颈

  用iostat检测是否是磁盘I/O瓶颈

用netstat检测是否是网络带宽瓶颈

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。

  • uptime
  • dmesg | tail
  • vmstat 1
  • mpstat -P ALL 1
  • pidstat 1
  • iostat -xz 1
  • free -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • top

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO 等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。

一、uptime ---快速查看服务器的负载情况

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况,正常情况需要小于cpu个数(2个);

通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而 15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低, 则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。

二、dmesg | tail

打印内核环形缓存区中的内容,可以用来查看一些错误;

该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。

注释:

1、Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。

2、TCP丢包:

TCP是基于不可靠的网络实现可靠的传输,肯定也会存在掉包的情况,如果通信中发现缺少数据或者丢包,那么,最大的可能在于程序发送的过程或者接收的过程出现问题。

例如服务端要给客户端发送大量数据,Send频率很高,那么就很有可能在Send环节出现错误(1.程序处理逻辑错误,2.多线程同步问题,3.缓冲区溢出等),如果没有对Send发送失败做处理,那么客户端收到的数据比理论要收到的数据少,就会造成丢数据,丢包现象。

三、vmstat 1

vmstat命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:

r: 等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的 CPU资源已经饱和。

free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情 况。

si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。

us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait) 和被偷走的时间(stolen,一般被其他虚拟机消耗)。

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

  procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。

IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比

vmstat第一次输出表示从开机到vmstat运行时的平均值;剩余输出的都是在指定的时间间隔内的平均值,上述例子中delay的值设置为1,除第一次以外,剩余的都是1秒统计一次,count未设置,将会一直循环打印。

上述的例子中delay设置为10,count设置为3,表示每行打印10秒内的平均值,只打印3次。

r:表示正在运行或者等待CPU调度的进程数。因为该列数据不包含I/O的统计信息,因此可以用来检测CPU是否饱和。若r列中的数字大于CPU的核数,表示CPU已经处于饱和状态。

free:当前剩余的内存;

si, so:交换分区换入和换出的个数,若换入换出个数大于0,表示内存不足;

us, sy, id, wa:CPU的统计信息,分别表示user time、system time(kernel)、idle、wait I/O。I/O处理所用的时间包含在system time中,因此若system time超过20%,则I/O可能存在瓶颈或异常;

四、mpstat -P ALL 1

该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

五、pidstat 1

pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。

六、iostat -xz 1

输入iostat -x 1 3命令,表示开始监控输入输出状态,-x表示显示所有参数信息,1表示每隔1秒监控一次,3表示共监控3次。

其中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转。

类似vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;

r/s, w/s, rkB/s, wkB/s,表示每秒向I/O设备发出的reads、writes、read Kbytes、write Kbytes的数量。

await,表示应用程序排队等待和被服务的平均I/O时间,该值若大于预期的时间,这表示I/O设备处于饱和状态或者异常。

avgqu-sz,表示请求被发送给I/O设备的平均时间,若该值大于1,则表示I/O设备可能已经饱和;

%util,每秒设备的利用率;若该利用率超过60%,则表示设备出现性能异常;

七、free –m

若buffers和cached接近0,说明I/O的使用率过高,系统存在性能问题。
Linux中会用free内存作为cache,若应用程序需要分配内存,系统能够快速的将cache占用的内存回收,因此free的内存包含cache占用的部分。

free 命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第 二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会 立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中体现),降低系统性能。

八、sar -n DEV 1

sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。

sar是System Activity Reporter的缩写,系统活动状态报告。

-n { keyword [,…] | ALL },用于报告网络统计数据。keyword可以是以下的一个或者多个: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和UDP6。

-n DEV 1, 每秒统计一次网络的使用情况;

-n EDEV 1,每秒统计一次错误的网络信息;

IFACE ,网络接口名称;

rxpck/s ,每秒接收到包数;

txpck/s ,每秒传输的报数;(transmit packages)

rxkB/s  ,每秒接收的千字节数;

txkB/s  ,每秒发送的千字节数;

rxcmp/s  ,每秒接收的压缩包的数量;

txcmp/s  ,每秒发送的压缩包的数量;

rxmcst/s,每秒接收的组数据包数量;

sar -b 1

sar命令查看当天IO统计记录

sar -n TCP,ETCP 1

该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;

  • TCP, 报告关于TCPv4网络流量的统计信息;
  • ETCP, 报告有关TCPv4网络错误的统计信息;

sar命令在这里用于查看TCP连接状态,其中包括:

  • active/s--发起的网络连接数量:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;
  • passive/s--接收的网络连接数量:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;
  • retrans/s:每秒TCP重传数量;

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

九、iotop

iotop命令类似于top命令,但是显示的是各个进程的I/O情况,对于定位I/O操作较重的进程有比较大的作用。

十、top

top命令包 含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这 个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进 程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

dstat

dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。

直接使用dstat,默认使用的是-cdngy参数,分别显示cpu、disk、net、page、system信息;

原文地址:https://www.cnblogs.com/wyl-520/p/12149746.html

时间: 2024-10-29 19:09:07

Linux命令性能监控分析的相关文章

Linux性能监控分析命令(五)—free命令介绍

性能监控分析的命令包括如下:1.vmstat2.sar3.iostat4.top5.free6.uptime7.netstat8.ps9.strace10.lsof 命令介绍:free命令是监控Linux内存使用最常用的命令语法格式: free [options] 参数说明: -m:以M为单位查看内容使用情况(默认为kb) -b:以字节为单位查看内存使用情况 -s:可以在指定时间段内不间断监控内存使用情况 -k:以KB为单位显示内存使用情况 -g:以GB为单位显示内存使用情况 -o:不显示缓冲区

Linux 虚拟机性能监控

性能监控工具 perf kvm 为了在主机中使用perf kvm,您必须访问/ proc / modules和/ proc / kallsyms文件."复制/ proc文件从guest虚拟机到主机",以将文件传输到主机并对文件运行报告. 注意: 如果直接复制所需的文件(例如,使用scp),您将只复制零的文件长度. 此过程描述如何首先将guest虚拟机中的文件保存到临时位置(使用cat命令),然后将它们复制到主机以供perf kvm使用. 在Guest系统上执行: # cat /proc

linux 磁盘性能监控

linux下对于查看进程的命令非常多也非常强大.经常使用的如:ps  top 可是在磁盘性能监控方面就没有那么统一了. 以下列举一些磁盘监控命令.此处仅仅是起到抛砖引玉作用,具体使用參数请參考man手冊. 一 df df命令能够获取硬盘被占用了多少空间.眼下还剩下多少空间等信息,它也能够显示全部文件系统对i节点和磁盘块的使用情况. 常见的用法如:df -h  以人类easy阅读的方式显示. 二 du du的英文原义为"disk usage",含义为显示磁盘空间的使用情况.统计文件夹(或

Linux性能监控分析命令

vmstat sar iostat top free uptime netstat ps strace lsof

【Linux】性能监控指令vmstat

一.概述 监控通常分为机器监控和服务监控,机器监控是基础监控,目的是为了获得系统当前的运行状态,服务监控则是主要目的,也是最应该关心的监控,机器监控也是为了更好的服务监控而存在,简单来说,服务监控和系统上部署的具体服务有关,但监控模式可以统一. 监控是为了获得相关的目标数据,获得数据是为了异常情况下作出分析,分析的目的是为了解决线上case以及性能调优.这基本上就是监控存在的意义了.一台线上服务器的机器监控,基本上可以分成四大类:cpu监控.磁盘容量监控.IO监控和网卡监控.不同业务将会导致服务

linux实时性能监控Netdata安装部署

Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测.现版本可以对nginx 日志docker,vm进行监控,越来越强大. 它用可视化的手段,将被监测者最细微的细节,展现了出来.这样,你便可以清晰地了解你的系统和应用程序此时的状况. 使用场景 1:系统.集群压测,关注系统瞬时性能表现: 2:故障排查,分析系统性能异常: 3:系统优化分析,快速验证优化效果: 新版本特性: netdata v1.6.0 released! central 

linux命令---系统监控

和系统运行状况相关的Shell命令:    1.  Linux的实时监测命令(watch):    watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动运行.该命令最为常用的两个选项是-d和-n,其中-n表示间隔多少秒 执行一次"command",-d表示高亮发生变化的位置.下面列举几个在watch中常用的实时监视命令:    /> watch -d -n 1 'who'   #每隔一秒执行一次who命令,以监视服务器当前用户登录的状况  

Linux下性能监控的三把军刀

Linux主机怎么管,十八般兵器件件都可以算得上是瑞士军刀,称手的兵器一两件即可,最常用的,莫过于stat家族三兄弟吧. 计算机主要资源是什么?CPU.内存和磁盘?尽管现在云计算技术有多普及,查看一个系统是否健康运行还是需要从这3方面来着手开始调查的,调查出了原因,能改程序就改程序,改不了程序就花钱升级硬件,不行就只能忍着了. 老大mpstat,主要用来查看CPU报告,包括user/system.iowait和中断等. 老二vmstat,这里的m不是虚拟机的m,而是虚拟内存的m,当然主要看内存(

Linux IO性能监控参数讲解

此计算机缺少 vc2005_sp1_with_atl_fix_redist,请安装所有缺少 以上各列的含义如下: rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 wrqm/s: 每秒对该设备的写请求被合并次数 r/s: 每秒完成的读次数 w/s: 每秒完成的写次数 rkB/s: 每秒读数据量(kB为单位) wkB/s: 每秒写数据量(kB为单位) avgrq-sz:平均每次IO操作的数据量(扇区数为单位) avgqu-sz: 平均等待处理的IO请