前言:

系统资源监控一般监控系统的CPU,内存,磁盘和网络。系统分为windows和Linux。本篇主要记录Linux。

Linux系统资源监控常用命令及工具

一、常用命令:top、free、iostat、netstat、vmstat

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,下面详细介绍它的使用方法

 统计信息区
top - :: up :, user, load average: 0.06, 0.60, 0.48
Tasks: total, running, sleeping, stopped, zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
进程信息区
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root S 0.7 1.3 :11.03 sshd
root R 0.7 0.5 :02.72 top
root S 0.0 0.3 :00.90 init
root S 0.0 0.0 :00.00 ksoftirqd/
root RT S 0.0 0.0 :00.00 watchdog/

统计信息区:
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。

进程信息区:
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
列名 含义
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

以下为默认不展示的列名:
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
P 最后使用的CPU,仅在多CPU环境下有意义
TIME 进程使用的CPU时间总计,单位秒
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考 sched.h

free

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。

 [root@zhoucentos home]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:

第3行内容代表是从系统的角度来统计的数据,其中的used包含了buffers和cached
第4行内容是代表从应用程序的角度来统计的数据,used是真正应用程序占用的内存
第3行的used = 第4行的used+第3行的buffers和cached
第5行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free)
如果是应用服务器的话,一般只看第4行:+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。

iostat

可以用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。
下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。
1.不加选项执行iostat

 linux # iostat
Linux 2.6.16.60-0.21-smp (linux) // avg-cpu: %user %nice %system %iowait %steal %idle
0.07 0.00 0.05 0.06 0.00 99.81 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.58 9.95 37.47
sdb 0.00 0.00 0.00

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:
• Device: 以sdX形式显示的设备名称
• tps: 每秒进程下发的IO读、写请求数量
• Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
• Blk_wrtn/s: 每秒写扇区数量
• Blk_read: 取样时间间隔内读扇区总数量
• Blk_wrtn: 取样时间间隔内写扇区总数量
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
2.指定采样时间间隔与采样次数
linux # iostat -d 1 2

 Linux 2.6.16.60-0.21-smp (linux) //
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.55 8.93 36.27
sdb 0.00 0.00 0.00 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 2.00 0.00 72.00
sdb 0.00 0.00 0.00

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。
注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
3.以kB为单位显示读写信息(-k选项)
我们可以使用-k或-M选项,指定iostat的部分输出结果以kB或MB为单位,而不是以扇区数为单位

 linux # iostat -d -k
Linux 2.6.16.60-0.21-smp (linux) // Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.55 4.46 18.12
sdb 0.00 0.00 0.00

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)
4.更详细的io统计信息(-x选项)
为显示更详细的io设备统计信息,可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

 linux # iostat -x -k -d
Linux 2.6.16.60-0.21-smp (linux) // ……
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60

以上各列的含义如下:
• rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
• wrqm/s: 每秒对该设备的写请求被合并次数
• r/s: 每秒完成的读次数
• w/s: 每秒完成的写次数
• rkB/s: 每秒读数据量(kB为单位)
• wkB/s: 每秒写数据量(kB为单位)
• avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
• avgqu-sz: 平均等待处理的IO请求队列长度
• await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
• svctm: 平均每次IO请求的处理时间(毫秒为单位)
• %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
对于以上示例输出,我们可以获取到以下信息:
1. 每秒向磁盘上写30M左右数据(wkB/s值)
2. 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
3. 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
4. 等待处理的IO请求队列中,平均有11.79个请求驻留
以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

 netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

执行netstat后,其输出结果为:

 Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 210.34.6.89:telnet 210.34.6.96: ESTABLISHED
tcp 210.34.6.89: 210.34.6.84:netbios-ssn ESTABLISHED
tcp localhost.localdom: localhost.localdom: ESTABLISHED
tcp localhost.localdom: localhost.localdom: ESTABLISHED
tcp 210.34.6.89: 210.34.6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix [ ] STREAM CONNECTED @000000dd
unix [ ] STREAM CONNECTED @000000dc
unix [ ] DGRAM /dev/log
unix [ ] STREAM CONNECTED @000000df

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

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

2、Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数:

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

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

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

-n 拒绝显示别名,能显示数字的全部转化成数字。

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

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

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

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

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

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

实用命令实例:

1、列出所有监听和未监听的端口  netstat -a

列出所有 tcp 端口 netstat -at;

列出所有 udp 端口 netstat -au

2、列出所有处于监听状态的 Sockets

只显示监听端口 netstat -l;

   只列出所有监听 tcp 端口 netstat -lt;

只列出所有监听 udp 端口 netstat -lu;

只列出所有监听 UNIX 端口 netstat -lx

3、显示每个协议的统计信息

显示所有端口的统计信息 netstat -s;

  显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su;

4、在 netstat 输出中显示 PID 和进程名称 netstat -p

5、当你不想让主机,端口和用户名显示,使用 netstat -n

如果只是不想让这三个名称中的一个被显示,使用以下命令

# netsat -a --numeric-ports

# netsat -a --numeric-hosts

# netsat -a --numeric-users

6、持续输出 netstat 信息,netstat 将每隔一秒输出网络信息  netstat -c

7、显示核心路由信息 netstat -r(使用 netstat -rn 显示数字格式,不查询主机名称)

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

找出运行在指定端口的进程  netstat -an | grep ':80'

9、显示网络接口列表  netstat -i

显示详细信息  netstat -ie等同于ifconfig

10、IP和TCP分析

查看连接某服务端口最多的的IP地址 netstat -nat | grep "192.168.1.101:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

TCP各种状态列表   netstat -nat |awk '{print $6}'

先把状态全都取出来,然后使用uniq -c统计,之后再进行排序  netstat -nat |awk '{print $6}'|sort|uniq -c |sort -rn

分析access.log获得访问前10位的ip地址 netstat -ant |awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存 交换情况,IO读写情况。
可以看到整个机器的 CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

 root@ubuntu:~# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa

2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

 root@ubuntu:~# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa

这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。
每个参数的意思:

r   表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈 了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队 列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b  表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd  虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free    空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff    Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用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时间。
vmstat –s 可以查看page in/page out的数量

二、常用工具:nmon、spotlight

nmon

Nmon的使用
1、赋予nmon可执行权限并在命令行输入: ./nmon 即可启动交互界面可时时显示系统资源
2、输入命令如下,即可对Linux进行监控,并生成.nmon格式的文件
[root@localhost ]# nmon -s 300 -c 288 -f -m /tmp
备注:
-s 300:表示每300秒采集一次数据,
-c 288 :表示采集288次,300*288=86400秒,刚好是1天的数据,这样运行一次这个程序就会生成一个一天的数据文件,
-m /tmp:表示生成的数据文件的路径
-f:表示生成的数据文件名中有时间
进入tmp目录,查看生成的xxx.nmon文件
使用sz/sftp下载该文件:sz localhost_160521_1314.nmon

使用分析工具对.nmon文件进行分析
打开分析工具nmon analyser v46.xlsm
点击【Analyze nmon data】按钮,加载下载的.nmon监控文件,生成新的excel文件先保存即可查看到Linux的各性能指标情况

!重点关注四项
cpu:cpu_all,cpu_summ
disk:diskbusy
memory的使用百分比:(total-free-buffer-cache)/total
netIO:eth0-total

spotlight

spotlight的使用

1、安装:像windows其他软件安装一样

2、展示界面

Linux系统资源监控--linux命令、nmon和spotlight的更多相关文章

  1. linux系统监控sar命令

    linux系统监控sar命令详解 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告, 包 ...

  2. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  3. Linux 系统监控常用命令

    简介 列举操作系统级监控常用的几个方法,建议收藏使用 CPU top 命令可用于监控系统整体负载,包括cpu.内存使用等,能够实时显示系统中各个进程的资源占用状况 输出样例 top - 19:37:4 ...

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

    性能监控分析的命令包括如下:1.vmstat2.sar3.iostat4.top5.free6.uptime7.netstat8.ps9.strace10.lsof 命令介绍:free命令是监控Lin ...

  5. linux系统资源查看常用命令

    1.vmstat vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.IO读写.CPU活动等进行监视.它是对系统的整体情况进行统计, ...

  6. Linux系统资源监控命令

    转自http://www.51testing.com/html/16/271416-149128.html 衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运行常规用户进程CPU运行niced ...

  7. linux性能监控基础命令

    压力测试监控下系统性能方法之一 #top 该命令监控的是进程的信息 看图逐行意义 top:执行命令的之间 up:已经执行了277天 2users:目前有两个使用者,使用#who可以查看具体的使用者详情 ...

  8. linux系统性能监控常用命令

      一.Linux服务器性能关注点 1)CPU -> load:表示cpu在一段时间内正在处理以及等待处理的任务之和统计信息,简单可理解为cpu正处理的线程数和能同时处理的线程数的比值.一般认为 ...

  9. Linux性能监控分析命令(四)—top命令介绍

    性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...

随机推荐

  1. 在gentoo中打开tomcat的远程调试开关

    在一般象gentoo等发行版中,系统安装tomcat这类软件后会产生一些启动脚本, 比如是/etc/init.d/tomcat-7, 启动方式与原始的tomcat不太一样.在gentoo中,假设须要远 ...

  2. C# .NET如何清空stringbuilder

    就红色的代码可以:   System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("hello&qu ...

  3. APP漏洞自动化扫描专业评测报告

    一.前言 目前在业界有很多自动化检测APP安全性的在线扫描平台.为了了解目前国内移动APP在线漏洞扫描平台的发展情况,我进行了一次移动安全扫描平台的评测分析:主要从漏洞项对比.扫描能力对比以及扫描结果 ...

  4. zipfile zip

    Python模块学习:zipfile zip文件操作 2015/05/27 · 系列教程 · zipfile 分享到:3 原文出处: DarkBull    最近在写一个网络客户端下载程序,用于下载服 ...

  5. 用Swift语言和Sprite Kit复制微信飞机大战游戏

    先上GitHub链接: https://github.com/songrotek/PlaneWar.git 接下来略微解说一下! 这个程序还有点Bug,见谅! 1 说明 游戏採用了Sprite kit ...

  6. [计算机]如何在win7下查看并更改文件的默认后缀名

    如何在win7下查看默认文件的后缀名并更改呢? 例如有一个文件本来是exe,想变更为txt.但是无法看到后缀名,就无法更改. 双击桌面上的计算机图标,或者任意盘符界面,单击如下图左侧“组织”右侧的下拉 ...

  7. Python获取CPU、内存使用率以及网络使用状态代码

    Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm

  8. ios23--动画做弹出提示框toast

    ) { /* [UIView animateWithDuration:2.0 animations:^{ // 执行动画 self.showHUB.text = @"当前购物车已空,赶紧买买 ...

  9. Nginx入门详解文档

    1 文章内容 掌握nginx+tomcat反向代理的使用方法. 掌握nginx作为负载均衡器的使用方法. 掌握nginx实现web缓存方法. 2 nginx介绍 2.1 什么是nginx Nginx是 ...

  10. 【Codeforces】Round #376 (Div. 2)

    http://codeforces.com/contest/731 不发题面了,自己点链接 总结一下 考场上 原以为这次要加很多raiting... 但FST狗记邓,只加了58rating 总结一下 ...