linux命令监控服务器性能

Posted 哈希哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux命令监控服务器性能相关的知识,希望对你有一定的参考价值。

1、vmstat 1

$ 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

34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0

32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0

32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0

32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0

32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0

   

vmstat命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:

r 等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的 CPU资源已经饱和。 

free系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情 况。

si, so交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。

us, sy, id, wa, st这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait) 和被偷走的时间(stolen,一般被其他虚拟机消耗)。

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

 

procs 
r (Load Arerage)列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。 
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

memory 
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常 
free 当前的空闲页面列表中内存数量(k表示) 
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。 
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap 
si 由内存进入内存交换区数量。 
so由内存交换区进入内存数量。

IO 
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。 
bo 块设备写入数据的总量(写磁盘)(每秒kb) 
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

System

显示采集间隔内发生的中断数 
in (Interrupt)列表示在某一时间间隔中观测到的每秒设备中断数。 
cs(Context Switch)列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

cpu

表示cpu的使用状态 
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。 
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。 
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 
id 列显示了cpu处在空闲状态的时间百分比

Context Switch Rate = Interrupt Rate + TPS* N

N= Context Switch Rate- Interrupt Rate/TPS

N<4则属于正常状态

2iostat

iostat -xz 1

输入iostat -x 1 10命令,表示开始监控输入输出状态,-x表示显示所有参数信息,1表示每隔1秒监控一次,10表示共监控10次。

其中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转

$ iostat -xz 1

Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)

avg-cpu:  %user  %nice %system %iowait  %steal   %idle

          73.96   0.00   3.73    0.03    0.06    22.21

Device:   rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s  avgrq-sz  avgqu-sz  await  r_await  w_await  svctm  %util

xvda       0.00     0.23    0.21  0.18   4.52      2.08    34.37     0.00    9.98    13.80    5.42     2.44   0.09

xvdb       0.01     0.00    1.02  8.94   127.97   598.53   145.79    0.00    0.43    1.78    0

 

 

iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:

  • r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
  • await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
  • avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
  • %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

 

3Ps

PS 命令是什么

查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。

ps命令支持三种使用的语法格式

  1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
  2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
  3. GNU 风格的长选项,选项前有两个“-”连字符

我们能够混用这几种风格,但是可能会发生冲突。本文使用 UNIX 风格的ps命令。这里有在日常生活中使用较多的ps命令的例子。

1. 不加参数执行ps命令

这是一个基本的 ps 使用。在控制台中执行这个命令并查看结果。

 

不加选项执行ps命令

结果默认会显示4列信息。

  • PID: 运行着的命令(CMD)的进程编号
  • TTY: 命令所运行的位置(终端)
  • TIME: 运行着的该命令所占用的CPU处理时间
  • CMD: 该进程所运行的命令

这些信息在显示时未排序。

2. 显示所有当前进程

使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。

  1. $ ps -ax

这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。

  1. $ ps -ax | less

 

ps all 信息

3. 根据用户过滤进程

在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户‘pungki‘的进程,可以通过下面的命令:

  1. $ ps -u pungki

 

通过用户过滤

4. 通过cpu和内存使用来过滤进程

也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

  1. $ ps -aux | less

 

显示全面信息

当结果很长时,我们可以使用管道和less命令来筛选。

默认的结果集是未排好序的。可以通过 --sort命令来排序。

根据 CPU 使用来升序排序

  1. $ ps -aux --sort -pcpu | less

 

根据cpu使用排序

根据 内存使用 来升序排序

  1. $ ps -aux --sort -pmem | less

 

根据内存使用来排序

我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

  1. $ ps -aux --sort -pcpu,+pmem | head -n 10

5. 通过进程名和PID过滤

使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

  1. $ ps -C getty

 

通过进程名和PID过滤

如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

  1. $ ps -f -C getty

 

通过进程名和PID过滤

6. 根据线程来过滤进程

如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。

  1. $ ps -L 1213

 

根据线程来过滤进程

7. 树形显示进程

有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

  1. $ps -axjf

 

树形显示进程

或者可以使用另一个命令。

  1. $ pstree

 

树形显示进程

8. 显示安全信息

如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

  1. $ ps -eo pid,user,args

参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

 

显示安全信息

能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。

9. 格式化输出root用户(真实的或有效的UID)创建的进程

系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

  1. $ ps -U root -u root u

-U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

-u 参数用来筛选有效用户ID(EUID)。

最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。

这里有上面的命令的输出结果:

 

show real and effective User ID

10. 使用PS实时监控进程状态

ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

  1. $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

 

组合 ps 和 watch

如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。

  1. $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’

 

组合 ps 和 watch

这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

举个例子,如果你只需要看名为‘pungki‘用户的信息,你可以使用下面的命令:

  1. $ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’

 

 


















以上是关于linux命令监控服务器性能的主要内容,如果未能解决你的问题,请参考以下文章

linux服务器监控性能

linux命令监控服务器性能

常用的Linux服务器性能查看命令

linux性能监控常用命令

linux性能监控(转)

Linux常用监控服务器性能命令 内存 CPU 磁盘