linux常用查看服务器性能参数命令
一、查看网络IO-ifstat命令
1、安装ifstat
首先需要手动安装ifstat
命令,按顺序输入以下几个命令即可:
1. wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
2. tar xzvf ifstat-1.1.tar.gz
3. cd ifstat-1.1
4. ./configure
5. make
6. sudo make install
2、输入ifstat命令查看服务器网络IO状况
[root@yun-tomcat-content_10 ifstat-1.1]# ifstat -a
lo eth0
KB/s in KB/s out KB/s in KB/s out
0.00 0.00 847.77 561.44
0.00 0.00 1727.16 1198.50
0.00 0.00 977.93 639.82
0.00 0.00 1035.96 656.18
0.00 0.00 371.97 372.07
二、查看磁盘IO-iostat命令
1、使用方式
iostat -xdk 1 3:
参数-d
表示显示设备(磁盘)使用状态;-k
某些使用block为单位的列强制使用Kilobytes为单位(Kb);1
表示每隔1秒刷新一次;3
表示刷新3次停止。
iostat -d -k 1:
参数-d
表示显示设备(磁盘)使用状态;-k
某些使用block为单位的列强制使用Kilobytes为单位(Kb);1
表示每隔1秒刷新一次。
2、示例1
[root@yun10 bin]# iostat -xdk 1 3
Linux 2.6.32-696.18.7.1.el6.ucloud.x86_64 (yun-tomcat-content_10) 08/21/2020 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.01 1.16 0.08 0.83 2.02 7.93 21.84 0.00 1.20 1.90 1.13 0.68 0.06
vdb 0.00 37.09 2.64 1.04 163.92 152.53 171.85 0.01 1.85 0.44 5.45 0.34 0.13
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 14.00 3.00 2.00 3.00 68.00 24.00 36.80 0.02 4.10 10.25 0.00 2.80 1.40
vdb 0.00 0.50 0.00 1.00 0.00 6.00 12.00 0.00 0.50 0.00 0.50 0.50 0.05
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2.1、参数及说明
rrqm/s
:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)。
wrqm/s
:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s
:每秒读取的扇区数。
wsec/
: 每秒写入的扇区数。
rKB/s
:The number of read requests that were issued to the device per second。
wKB/s
:The number of write requests that were issued to the device per second。
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秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
。
3、示例2
[root@yun-develop-service_01 ycopen]# iostat -d -k 1
Linux 2.6.32-431.11.9.el6.ucloud.x86_64 (yun-develop-service_01) 08/21/2020 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 1.31 0.88 14.18 61140246 990104832
vdb 0.07 0.09 0.82 6474753 57296088
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 18.00 144.00 252.00 144 252
vdb 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0 0
vdb 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0 0
vdb 0.00 0.00 0.00 0 0
3.1、参数及说明:
tps
:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s
:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s
:每秒向设备(drive expressed)写入的数据量;
kB_read
:读取的总数据量;
kB_wrtn
:写入的总数量数据量;这些单位都为Kilobytes。
三、查看磁盘IO-pidstat命令
pidstat
主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
1、输入pidstat命令查看磁盘IO
每隔1秒刷新一次进程id为29828的磁盘IO情况
[root@yun10 bin]# pidstat -d 1 -p 29838
Linux 2.6.32-696.18.7.1.el6.ucloud.x86_64 (yun-tomcat-content_10) 08/21/2020 _x86_64_ (4 CPU)
05:02:16 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:02:17 PM 29838 0.00 284.00 0.00 java
05:02:18 PM 29838 0.00 360.00 0.00 java
05:02:19 PM 29838 0.00 84.00 0.00 java
05:02:20 PM 29838 0.00 188.00 0.00 java
05:02:21 PM 29838 0.00 48.00 0.00 java
05:02:22 PM 29838 0.00 84.00 0.00 java
05:02:23 PM 29838 0.00 64.00 0.00 java
2、参数及说明
kB_rd/s
: 每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s
: 每秒进程向磁盘写的数据量(以kB为单位)
Command
: 拉起进程对应的命令
3、每隔1秒刷新一次磁盘IO状况
[root@y10 bin]# pidstat 1
Linux 2.6.32-696.18.7.1.el6.ucloud.x86_64 ()08/21/2020 _x86_64_ (4 CPU)
05:04:34 PM PID %usr %system %guest %CPU CPU Command
05:04:35 PM 29838 16.83 0.99 0.00 17.82 0 java
05:04:35 PM PID %usr %system %guest %CPU CPU Command
05:04:36 PM 1300 1.00 0.00 0.00 1.00 3 zabbix_agentd
05:04:36 PM 19849 1.00 1.00 0.00 2.00 1 pidstat
05:04:36 PM 29838 19.00 3.00 0.00 22.00 0 java
05:04:36 PM PID %usr %system %guest %CPU CPU Command
05:04:37 PM 29838 12.00 2.00 0.00 14.00 0 java
05:04:37 PM PID %usr %system %guest %CPU CPU Command
05:04:38 PM 1304 0.00 1.00 0.00 1.00 1 zabbix_agentd
05:04:38 PM 19849 0.00 1.00 0.00 1.00 1 pidstat
05:04:38 PM 29838 9.00 1.00 0.00 10.00 0 java
05:04:38 PM PID %usr %system %guest %CPU CPU Command
05:04:39 PM 19849 0.00 1.00 0.00 1.00 1 pidstat
05:04:39 PM 29838 18.00 2.00 0.00 20.00 0 java
05:04:39 PM 30720 1.00 0.00 0.00 1.00 0 java
pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见JAVA进程占用cpu的绝大多数时间,但是1个核仍未跑满,因为没有达到100%,机器有4核,所以cpu负载很低。
四、查看服务器综合性能-vmstat命令
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。可以看到整个机器的CPU、内存、IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
1、每隔1秒刷新一次服务器综合性能情况
[root@]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 9544 145928 46876 3817880 0 0 42 40 0 0 8 1 91 0 0
1 0 9544 143184 46884 3818132 0 0 0 20 2514 1979 9 1 90 0 0
0 0 9544 144036 46892 3818236 0 0 0 36 1675 1212 4 1 96 0 0
0 0 9544 145176 46892 3818328 0 0 0 0 1865 1640 5 1 95 0 0
0 0 9544 140236 46892 3818504 0 0 0 0 2242 1719 6 2 92 0 0
0 0 9544 141232 46892 3818600 0 0 0 8 1625 1255 4 1 95 0 0
0 0 9544 142648 46900 3818696 0 0 0 12 2565 1932 6 1 93 0 0
2、参数及说明:
r
: 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高
。
b
: 表示阻塞的进程,这个不多说,进程阻塞。
swpd
: 虚拟内存已使用的大小。如果大于0,表示你的机器物理内存不足了;如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
。
free
: 空闲的物理内存的大小,我的机器内存总共8G,剩余3817M。
buff
: Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用46多M。
cache
: cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用46多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用)。
si
: 每秒从磁盘读入虚拟内存的大小。如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
。
so
: 每秒虚拟内存写入磁盘的大小。如果这个值大于0,同上
。
bi
: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,如果没什么IO操作,值几乎是0。
bo
: 块设备每秒发送的块数量。假如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整
。
in
: 每秒CPU的中断次数,包括时间中断
cs
: 每秒上下文切换次数。例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换, 这个值要越小越好,太大了,要考虑调低线程或者进程的数目 。例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源的,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us
: 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳);如果长期大于50%,优化程序。
sy
: 系统CPU时间,如果太高,表示系统调用时间长
。例如是IO操作频繁。
id
: 空闲 CPU时间,一般来说,id + us + sy = 100
,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率,如果us + sy >80说明CPU不足
。
wt
: 等待IO CPU时间。