Linux应用监控工具

Linux下的监控工具丰富繁杂,如果只知道top、free之类的就太少了,而且也不能胜任日常的Linux管理工作,尤其是在排除Web服务器问题时。

本文给出5个Linux下功能更为强大的监控工具,有了它们就能涵盖日常监控80%的任务。下图为Linux下监控各个模块的实用工具,对于应用级运维来说,一般不需要监控特别底层的东西。

vmstat

相比于看各个进程cpu使用和内存使用而言,vmstat可以看机器全局的cpu、内存和io使用情况。

Vmstat 2表示以2秒为间隔,进行无限数量的采样,采样数据的各个列含义为:

r表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。

b表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff是用来存储目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo块设备每秒发送的块数量,例如我们读取文件,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等待IO CPU时间。

iostat

iostat命令是另一个研究磁盘吞吐量的工具。和sar类似,iostat可以使用间隔和计数参数。第一个间隔的输出包含Linux总运行时间的指标。

不使用选项,iostat只显示覆盖启动以来全部时间的一组指标。

CPU信息包含基本上和top一样的字段。iostat CPU输出显示在用户模式中执行、执行正常进程、在内核(系统)模式中执行,进程等待I/O完成时处于空闲和没有等待进程时处于空闲的CPU时间的百分比。CPU行是所有CPU的摘要。

磁盘信息与sar -d提供的信息类似。输出包括每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)的总数量。

iostat提供几个用于定制输出的开关。最有用的有:

-c只显示CPU行

-d显示磁盘行

-k以千字节为单位显示磁盘输出

-t在输出中包括时间戳

-x在输出中包括扩展的磁盘指标

iostat -x较为高级,输出信息也较多,各列的含义如下:

rrqm/s,wrqm/s:每秒钟合并的读写请求数。多个单独的I/O请求可以合并到一个传输请求中,因为每个传输请求可以有不同的大小。

r/s,w/s:每秒钟读写请求数。

rsec/s,wsec/s:每秒钟读写的扇区数。

rkB/s,wkB/s:每秒钟读写了多少KB。

avgrq-sz:请求的平均大小,此值是以扇区为单位。

avgqu-sz:请求队列的平均长度。

await:显示系统级别(内核)所占用CPU的百分比。

svctm:I/O请求的平均服务时间(单位为毫秒)。

%util:I/O请求过程中CPU时间的百分比(设备的带宽使用率)。当接近100%时设备处于饱和状态。

sar

sar命令包含选项、采样间隔时间和采样次数。选项较多,包含各种资源的监控,常见选项有:

-A所有的报告总和

-a文件读,写报告

-B报告附加的buffer cache使用情况

-b buffer cache使用情况

-c系统调用使用报告

-d硬盘使用报告

-g有关串口I/O情况

-h关于buffer使用统计数字

-m IPC消息和信号灯活动

-n命名cache

-p调页活动

-q运行队列和交换队列的平均长度

-R报告进程的活动

-r没有使用的内存页面和硬盘块

-u CPU利用率

-v进程,i节点,文件和锁表状态

-w系统交换活动

-y TTY设备活动

常见的命令:sar 1 10,没有选项则显示CPU的简单信息;

sar -n DEV 1 10,记录网络使用情况;

sar -v 1 10,记录内核中各个表的使用情况,信息列的含义如下,显示格式是实际使用表项/可以使用的表项数,显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。

inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数MAX-INODE控制。

file-sz:目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控制。

ov:溢出出现的次数。

Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE控制。

Sar -d 1 10,记录设备使用情况,%busy的值比较小,说明用于处理传送请求的有效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,等待队列通常为2较好,达到10以上就有问题了,文件系统的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。

device:sar命令正在监视的块设备的名字。

%busy:设备忙时,传送请求所占时间的百分比。

avque:队列站满时,未完成请求数量的平均值。

r+w/s:每秒传送到设备或从设备传出的数据量。

blks/s:每秒传送的块数,每块512字节。

avwait:队列占满时传送请求等待队列空闲的平均时间。

avserv:完成传送请求所需平均时间(毫秒)。

Sar -b 1 10,记录buffer和cache的使用情况。最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到提高。

bread/s:每秒从硬盘读入系统缓冲区buffer的物理块数。

lread/s:平均每秒从系统buffer读出的逻辑块数。

%rcache:在buffer cache中进行逻辑读的百分比。

bwrit/s:平均每秒从系统buffer向磁盘所写的物理块数。

lwrit/s:平均每秒写到系统buffer逻辑块数。

%wcache:在buffer cache中进行逻辑读的百分比。

pread/s:平均每秒请求物理读的次数。

pwrit/s:平均每秒请求物理写的次数。

Sar -g 1 10,记录串口IO使用情况。

ovsiohw/s:每秒在串口I/O硬件出现的溢出。

ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。

ovclist/s:每秒字符队列出现的溢出。

netstat

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

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

netstat选项包括-选项和采样间隔,-选项含义如下:

-a (all)显示所有端口,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n拒绝显示别名,能显示数字的全部转化成数字,用于加快显示速度

-l仅列出有在Listen (监听)的套接字服務状态

-p显示建立相关链接的进程号和程序名

-r显示路由信息,路由表

-e显示以太网信息,包括扩展信息,例如uid等

-s按各个协议进行统计

-c每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

常见的选项组合如下:

-at列出所有TCP端口信息

-au列出所有UDP端口信息

-lt列出所有监听TCP端口信息

-lu列出所有监控UDP端口信息

-st显示TCP端口统计信息

-su显示UDP端口统计信息

netstat -ap | grep ssh找出相应程序的端口信息

netstat -an | grep ‘:80‘找出指定端口信息

-ant以数字显示所有TCP端口信息

-e表示以太网信息,若接收错和发送错接近为零或全为零,网络的接口无问题。但当这两个字段有100个以上的出错分组时就可以认为是高出错率了。高的发送错表示本地网络饱和或在主机与网络之间有不良的物理连接;高的接收错表示整体网络饱和、本地主机过载或物理连接有问题,可以用Ping命令统计误码率,进一步确定故障的程度。netstat  -e和ping结合使用能解决一大部分网络故障。

ifstat

ifstat是监控各个网卡输入输出速率的程序,并非Linux系统的内置监控程序,需要独立下载。其安装十分简单,一路./configure、make、make install即可。

ifstat命令选项和vmstat命令类似,都是后面接两个数字,第一个数字是采样间隔秒数,第二个数字是采样参数。

ifstat的输出结果很简单,是各个网卡的输入输出吞吐量,单位是kbps。

时间: 2024-10-14 18:10:30

Linux应用监控工具的相关文章

Htop – Linux进程监控工具

Htop 是一个非常高级的交互式的实时linux进程监控工具. 它和top命令十分相似,但是它具有更丰富的特性,例如用户可以友好地管理进程,快捷键,垂直和水平方式显示进程等等. Htop是一个第三方工具,它不包含在linux系统中,你需要使用YUM包管理工具去安装它. 一,以rpm包方式安装htop 1,配置yum源 -------------- For RHEL/CentOS 7 -------------- # wget http://pkgs.repoforge.org/rpmforge-

LR杂记 - Linux系统监控工具之vmstat详解

题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量. 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可.算法相对简单,但是注意几个细节: 1:原图可能不连通. 2:有的连通分量只有一个点,当舍去该点时候,连通分量-1: 复习求割点的好题! #include<iostream> #include<cstdio> #include<vector> using namespace std; int n,m; vector<vector&

20个常用Linux性能监控工具/命令

20个常用Linux性能监控工具/命令 对于 Linux/Unix 系统管理员非常有用的并且最常用的20个命令行系统监视工具.这些命令可以在所有版本的 Linux 下使用去监控和查找系统性能的实际原因.这些监控命令足够你选择适合你的监控场景. 1.top — Linux 系统进程监控 top 命令是性能监控程序,它可以在很多 Linux/Unix 版本下使用,并且它也是 Linux 系统管理员经常使用的监控系统性能的工具.Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,它显示出

Linux实时监控工具Nmon使用

官网:http://nmon.sourceforge.net/pmwiki.php?n=Main.HomePage 下载:http://sourceforge.net/projects/nmon/files/nmon_linux_14g.tar.gz 解压: #chmod u+x nmon_x86_64_sles11 #chmod 777 nmon_x86_64_sles11 版本不同,对应文件也不同 启动: # ./nmon_x86_64_sles11 按C显示CPU信息,再按一次C关闭 按M

管理员必备的几个Linux系统监控工具

需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性能问题可能原因.此次讨论到的工具只是分析和调试服务器下面问题时最基本工具中的一部分. 1.找出瓶颈2.硬盘(存储)瓶颈3.CPU及内存瓶颈4.网络瓶颈#1: top - 进程活动top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷

linux性能监控工具------nmon工具的安装及简单使用

1.工具的安装下载rpm包: wget http://mirror.ghettoforge.org/distributions/gf/el/6/gf/x86_64/nmon-14i-1.gf.el6.x86_64.rpm# rpm -ivh nmon-14i-1.gf.el6.x86_64.rpm 运行nmon命令进入交互式界面 # nmon 按c可以进入cpu的详细性能信息界面 2.生成报表并分析      # nmon -f -s 10 -c 60       -f 表示生成的数据文件名中有

【转】管理员必备的Linux系统监控工具

原文连接: 管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次. #2: vmstat -系统活动.硬件及系统信息 使用vmstat命令可以得到关于进程.内存.内存分页.堵塞IO.traps及CPU活动的信息. #3: w - 显示谁已登录,他们正在做什么? w命令显示系统当前用户及其运行进程的信息. #4:uptime - 告诉系统已经运行了多久? u

Linux 进程监控工具 monit

如果你已经使用Cacti Nagios 以及zabbix 等一系列监控工具来监控你的项目,但仍然达不到你想要的进程挂掉可以自动拉起并且邮件报警的功能,那么请往下看,推荐一款及其好用的进程监控软件Monit: Monit是一款功能非常丰富的进程.文件.目录和设备的监测软件,适用于Linux/Unix平台. 它可以自动修复那些已经停止运作的程序,特使适合处理那些由于多种原因导致的软件错误,同时Monit 包含一个内嵌的 HTTP(S) Web 界面,你可以使用浏览器方便地查看 Monit 所监视的服

Linux 流量监控工具 iftop

Linux 流量监控工具 iftop Iftop工具主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同哪台机器间的流量大小,非常适合于代理服务器和iptables服务器使用,这样可以方便的查看各客户端流量情况.iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等,详细的将会在后面的使用参数中说明. 安装 yum install iftop –y 参数 -i设定监测的网卡,如:# iftop -i eth1 -B 以bytes为单位显示流量(默认是bits)

Linux流量监控工具 - iftop (最全面的iftop教程)

在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.iftop是什么? iftop是类似于top的实时流量监控工具. 官方网站:http://www.ex-parrot.com/~pdw/iftop/ 二.iftop有什么用? iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等,详细的将会在后面的使用参数中说明. 三.安装