*stat系列命令
dstat:系统资源统计,代替vmstat,iosat,ifstat,netstat命令。
Usage: #dstat [-afv] [options…] [delay [count]]
[options]:
-c:单独显示cpu相关信息;
-d:单独显示disk相关信息;
-m:单独显示memory相关统计数据;
-n:单独显示network相关统计数据;
-r:单独显示io请求相关的统计数据;
-s:显示swapped相关的统计数据。
-p:单独显示process相关统计数据;
-g:单独显示page相关统计数据;
例如:
#dstst //大致总体显示
#dstat -afv //详细显示
还会有后续…
vmstat:显示虚拟内存信息
作用:可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。
如:#vmstat
procs:
- r:可运行(正运行或等待运行)进程的个数,和核心数有关(当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。)
- b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)。
memory:
- swpd:交换内存的使用总量(如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。)。
- free:空闲物理内存总量。
- buffer:用于buffer的内存总量(用来存储,目录里面有什么内容,权限等的缓存)。
- cache:用于cache的内存总量(用来记忆我们打开的目录或文件,给文件做缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用)。
swap:
- si:从磁盘交换进虚拟内存的数据速率kb/s(如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉)。
- so:从虚拟内存交换至磁盘的数据速率kb/s(如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉)。
io:
- bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒。
- bo:块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
system:
- in:每秒CPU的中断次数,包括时间中断。
- cs:进程切换速率,即每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。。
cpu:
- us:time spent running non-kernel code,运行非内核代码所花费的时间,用户CPU时间。
- sy:time spent running kernel code,运行内核代码所花费的时间,系统CPU时间。
- id:time spent idle,空闲时间。
- wa:time spent waiting for IO,等待输入输出所花费的时间。
- st:time stolen from a virtual machine,从虚拟机窃取的时间
[root@centos7 profile.d]#vmstat -s //显示内存统计信息
1423964 K total memory
158260 K used memory
91904 K active memory
144240 K inactive memory
1004348 K free memory
2308 K buffer memory
259048 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
2142 non-nice user cpu ticks
15 nice user cpu ticks
3347 system cpu ticks
588566 idle cpu ticks
1724 IO-wait cpu ticks
0 IRQ cpu ticks
67 softirq cpu ticks
0 stolen cpu ticks
252305 pages paged in
21207 pages paged out
0 pages swapped in
0 pages swapped out
374065 interrupts
324950 CPU context switches
1587110434 boot time
1896 forks
iostat:统计cpu和IO信息
作用:iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
iostat数据的来源是Linux操作系统的/proc/diskstats
#iostat -d -x -k 1 10
命令参数解释:
-d 表示,显示设备(磁盘)使用状态;
-k 显示的磁盘读写速度为KB;
-m:显示的磁盘读写速度为MB;
-x,该选项将用于显示和io相关的扩展数据。
1 表示,数据显示每隔2秒刷新一次。
10 表示一共刷新10次;
如图:
cpu属性值说明:
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。
-
- 如果%iowait的值过高,表示硬盘存在I/O瓶颈
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。
-
- 如果%idle值高,表示CPU较空闲
-
- 如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。
-
- 如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。
[Device]属性值说明:
- 如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。
- tps:该设备每秒的传输次数
- kB_read/s:每秒从设备(drive expressed)读取的数据量;
- kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
- kB_read: 读取的总数据量;
- kB_wrtn:写入的总数量数据量;
如图:
查看设备使用率(%util)、响应时间(await)
【-d 显示磁盘使用情况,-x 显示详细信息】
显示说明:
- rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
- wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
- rsec/s:每秒读取的扇区数;(每秒读操作的次数)
- wsec/:每秒写入的扇区数。 (每秒写操作的次数)
- rKB/s = kB_read/s:每秒从设备(drive expressed)读取的数据量,KB单位;
- wKB/s = kB_wrtn/s:每秒向设备(drive expressed)写入的数据量,KB单位;
- avgrq-sz :每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位;
- avgqu-sz :平均为完成的IO请求数量,即平均意义上的请求队列长度毫无疑问,队列长度越短越好。
- await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
- svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
- %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 =80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了。(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
ifstat:阅读网络接口统计数据的便捷工具
作用:阅读网络接口统计数据的便捷工具
ifstat整洁地打印出网络接口统计数据。该实用程序保留历史文件中显示的以前数据的记录,并且默认情况下只显示上次和当前通话。历史文件的位置默认为"/tmp/.ifstat.u$UID",但可能会被IFSTAT_HISTORY环境变量覆盖。同样,默认 xstat(extend stats)的位置是/tmp/。< xstat name> _ifstat.u$UID。
Usage: #ifstat [OPTION] [ PATTERN [ PATTERN ] ]
此命令不常用
netstat:查看网络连接情况
netstat 查看网络连接情况
#netstat [options]
[options]:
-a:显示所有正在连接的sockets
-l(小写L):显示/监听服务器的sockets
-i/-I:显示网卡通讯信息
-t:显示tcp协议
-u:显示udp协议
-p:显示进程名称及PID
-e:显示用户的ID和inode节点号
-r:显示路由表信息(#netstat -r = #route -n)
-n:不解析名称(如hosts,prot,user)
例:查看使用tcp协议且正处于连接状态的进程
#netstat -ntlp