当前位置: 首页 > Linux

Linux性能监控【工具】

时间:2023-04-06 11:26:59 Linux

监控类监控命令cpps,top,sarmemoryfree,vmstat,sar磁盘空间df,du,fdisk磁盘I/Oiostat网络I/Onetstat,sar,ethool系统监控自带常用文件/proc目录/proc/loadavg保存的是平均系统负载,它的前三列分别代表最近1分钟、5分钟、15分钟的平均负载。反映系统当前的繁忙程度。/proc/meminfo统计当前内存使用情况,经常被free命令使用;可以用文件查看命令直接读取这个文件,它的内容显示为两列,前者是统计属性,后者是对应的值;/proc/diskstats磁盘设备的磁盘I/O统计列表;/proc/net/dev网络流入流出统计,包括接收包数、发送包数、发送包时的错误和冲突等。/proc/cpuinfo查看cpu详情cat/proc/cpuinfo|grep'processor'>>psaux输出格式USER:进程所有者PID:pid%CPU:CPU占用率%MEM:占用内存占用率VSZ:占用虚拟内存大小RSS:占用内存大小TTY:终端次编号STAT:状态进程START:进程开始时间TIME:执行时间COMMAND:执行命令进程的状态D:不可中断静态R:正在执行S:静态T:暂停执行Z:不存在但暂时无法消除W:内存分页不足可以分配<:高优先级进程N:低优先级进程L:内存中有内存分配和Lock并列出CPU使用率最高的五个进程ps-eopid,tid,pcpu,command|排序-nr-k3|head-n5//ps会列出pidtidcpucommand//sort-ksort列中选中,3表示第三列cpups-aux|排序-nr-k3|head-5pid进程tid线程pcpu消耗CPU根据进程查看线程信息pstree-ppid查看线程详细信息:cat/proc/pid/task/tid/status实时显示top-H-ppid查看下所有线程进程ps-efL|greppid>>toptop输出格式PR:优先级NI:nice值。负值表示高优先级,正值表示低优先级VIRT(kb)进程占用的总存储空间=res+swapRES(kb):代码和数据占用的总存储空间SHR(kb):共享存储空间otherprocessesSpaceS(status)D=uninterruptiblesleepR=runningS=sleepingT=tracedorstoppedZ=zombieTime+:进程运行时间如果我们想每隔一分钟刷新一次输出到屏幕,刷新两次后退出,使用$top-d60-n2如果上面的TOP信息输出到top.log文件,使用:$top-d60-n2-b>top.logtop显示分为两部分,一个是系统的基本信息,另一个是实时进程信息。点击键盘“u”,系统提示输入用户名,只显示某用户的进程;点击“k”,系统提示输入要“杀死”的进程的PID,输入后不会显示某个PID的进程>>free用于显示已用和空闲的物理内存和虚拟内存内存,以及内核使用的缓存[-b,-k,-m]选择不同单位显示存储容量,系统默认为“-k”-t:加一行显示总量-sdelay:延迟时间后执行一次free,然后不断输出内存信息-V:显示版本信息>>vmstat监控内存使用情况。输出解释-r表示运行队列(即实际分配给CPU的进程数)。我测试的服务器CPU比较空闲,没有程序在运行。当这个值超过CPU数量时,就会出现CPU瓶颈。这也和top的负载有关。一般负载超过3就比较高,超过5就高,超过10就异常,服务器的状态很危险。top的负载类似于每秒运行队列。如果运行队列太大,说明你的CPU很忙,一般会导致CPU占用率高。b表示阻塞的进程。这个我就不多说了。大家都知道一个进程被阻塞了。swpd使用的虚拟内存的大小。如果大于0,说明你的机器物理内存不足。如果不是程序内存泄漏的原因,那么就应该升级内存或者将耗内存的任务迁移到其他机器上。free空闲物理内存的大小,我的机器总内存8G,剩余3415M。bufflinux/unix系统用来存储、缓存目录里有什么内容,权限等,我的机器占用300Mcache左右。缓存直接用来记忆我们打开的文件,对文件进行缓冲。我的机器大约占用了300多M(这里是Linux/Unix的巧妙之处,将一部分空闲的物理内存用作文件和目录缓存是为了提高程序执行的性能,当程序使用内存时,buffer/cached会快速使用。)si每秒从磁盘读取的虚拟内存的大小。如果这个值大于0,说明物理内存不够或者内存泄露了。需要找到耗内存的进程并解决。我的机器有足够的内存,一切正常。so每秒写入磁盘的虚拟内存大小,如果这个值大于0,同上。bi块设备每秒接收的块数。这里的块设备是指系统中的所有磁盘和其他块设备。默认块大小为1024字节。我在这台机器上没有IO操作,所以一直是0,但是我一直在处理在一台复制大量数据(2-3T)的机器上看到它可以达到140000/s,并且diskwritingspeed几乎是每秒140Mbo一个块设备每秒发送的块数。比如我们读一个文件,bo必须大于0,bi和bo一般都接近0,否则IO太频繁,需要调整。in每秒CPU中断次数,包括时间中断cs每秒上下文切换次数。比如我们在调用系统函数的时候,需要进行上下文切换、线程切换、进程上下文切换。值越小越好,太大了现在考虑减少线程数或进程数。比如在apache、nginx等web服务器中,我们在做性能测试的时候一般会进行几千甚至几万的并发测试。选择web服务器的过程可以根据进程或线程的峰值是否已经降低,进行压力测试,直到cs达到一个比较小的值。这个进程数和线程数是一个比较合适的值。系统调用也是如此。每调用一次系统函数,我们的代码就会进入内核空间,从而产生上下文切换。这是非常耗费资源的,我们应该尽量避免频繁调用系统函数。太多的上下文切换意味着你的大部分CPU都浪费在上下文切换上,导致CPU做正事的时间变少,CPU没有得到充分利用,这是不可取的。us用户CPU时间,我以前在一台服务器上做加解密很频繁,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能不好).sy系统CPU时间,如果太高说明系统调用时间长,比如频繁的IO操作。id空闲CPU时间,一般来说,id+us+sy=100,一般我认为id是空闲CPU占用率,us是用户CPU占用率,sy是系统CPU占用率。wt等待IOCPU时间。>>dfdf命令可以获取硬盘空间占用多少,剩余空间多少等信息。它还可以显示所有文件系统对索引节点和磁盘块的使用情况。df命令各选项含义如下:-a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。-k:以k字节为单位显示。-i:显示i节点信息而不是磁盘块。-t:显示每个指定类型的文件系统的磁盘空间使用情况。-x:列出非指定类型的文件系统的磁盘空间使用情况(与t选项相反)。-T:显示文件系统类型。>>dudu的英文原意是“diskusage”,意思是显示磁盘空间的使用情况,统计目录(或文件)占用磁盘空间的大小。该命令的作用是逐级进入指定目录的各个子目录,并显示该目录占用的文件系统数据块(1024字节)。如果没有指定目录,则统计当前目录。du命令各选项含义如下:-s:对于每个Names参数,只给出占用的数据块总数。-a:递归显示指定目录下的每个文件和子目录下的每个文件占用的数据块数。如果既不指定-s也不指定-a,则只显示Names中每个目录和每个子目录占用的磁盘块数。-b:以字节为单位列出磁盘空间使用情况(系统默认为k字节)。-k:以1024字节为单位列出磁盘空间使用情况。-c:在末尾添加总计(系统默认设置)。-l:计算所有文件的大小,对于硬链接文件计算多次。-x:跳过不同文件系统上的目录,不计入。按文件大小排序du-s*|排序-nr|head>>fdisk可以划分磁盘分区查看分区:fdisk-l>>iostatCPU使用率报告、磁盘使用率报告、系统吞吐量报告和适配器吞吐量报告。选项参数:-c:显示CPU使用率报告;-d:显示设备使用报告;-h,-n:(人性化)显示NFS报告;-k、-m:以KB/s、MB/s为单位显示统计信息;参数解释:cpureport:%user:CPU在用户空间运行正常进程的时间百分比;%nice:CPU在用户空间运行nice优先级进程的时间百分比;%system:CPU在内核空间运行的时间百分比;%iowait:CPU等待磁盘操作的时间百分比;%steal:等待其他CPU的时间百分比;%idle:CPU空闲时间百分比;设备报告:Tps:每秒完成的事务;blk_read/s,Blk_wrtn/s:每秒读写设备块;Blk_read、Blk_wrtn:读写设备块总数;kB_read/s、kB_wrtn/s、MB_read/s、MB_wrtn/s:每秒读写数据量,单位为KB、MB;kB_read、kB_wrtn、MB_read、MB_wrtn:以KB、MB为单位的读写数据总数;rrqm/s、wrqm/s:每秒合并的排队请求数;输出说明rrqm/s:readsrelatedtothisdevicepersecond已经合并了多少个fetch请求(当系统调用需要读取数据时,VFS将请求发送给各个FS,如果FS发现有不同的读取请求读取了该设备的数据同一个块,FS会合并请求);wrqm/s:每秒合并多少与这个设备相关的写请求。rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。rKB/s:每秒向设备发出的读取请求数;wKB/s:每秒向设备发出的写请求数;avgrq-sz平均请求扇区大小avgqu-sz是平均请求队列的长度。当然,队列长度越短越好。await:每次IO请求的平均处理时间(微秒和毫秒)。这个可以理解为IO响应时间。一般系统IO响应时间应小于5ms。如果大于10ms,则比较大。这个时间包括排队时间和服务时间,也就是说一般情况下,await大于svctm,差值越小,排队时间越短;问题。svctm表示每个设备I/O操作的平均服务时间(以毫秒为单位)。如果svctm的值非常接近await,说明几乎没有I/O等待,磁盘性能非常好。如果await的值远高于svctm的值,说明I/O队列等待时间过长,系统上运行的应用程序会变慢。%util:统计时间内所有处理IO的时间,除以总统计时间。例如统计间隔为1秒,设备处理IO时间为0.8秒,空闲时间为0.2秒,则设备的%util=0.8/1=80%,所以这个参数暗示了设备有多忙.一般如果这个参数为100%,说明设备已经满负荷运行(当然,如果是多盘,即使%util为100%,因为磁盘的并发,磁盘使用可能不是瓶颈)>>ethool显示网络状态。选项:-a:显示所有连接和监听端口;-e:显示以太网统计信息;-r:显示路由表;-s:显示每个协议的统计信息;-n:以数字形式显示地址和端口号;-pproto:显示协议proto的连接信息;-v:显示正在进行的工作;>>sarsar是一个性能监控工具,sar命令rpm包systat提供sar查看cpu、内存、I/O、网络统计数据等,比较常用的是CPU和RAM的观察。另外在RAM的观察中,比较常用的是%memused(内存使用百分比)和%swpused(虚拟内存使用百分比)。output%user在用户模式下运行一个进程所花费的时间%nice运行一个正常进程所花费的时间%system在内核模式(系统)下运行一个进程所花费的时间%iowait当没有进程在这个CPU上执行时处理器等待I/O完成%idle没有进程在这个CPU上执行的时间rxpck/s每秒接收的数据包txpck/s每秒发送的数据包rxbyt/s每秒接收的字节数txbyt/s每秒发送的字节数rxcmp/s每秒接收的压缩数据包txcmp/s每秒发送的压缩数据包rxmcst/s每秒接收的多播数据包