性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础

文章目录

    • 一、前言
    • 二、top
    • 三、vmstat
    • 四、iostat
    • 五、free
    • 六、iftop

一、前言

“子曰:“温故而知新,可以为师矣。”
—–《论语》

二、top

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
参数说明:
  • PID:进程ID,进程的唯一标识符说明.
  • USER:进程所有者的实际用户名。
  • PR:进程的调度优先级。这个字段的一些值是 ‘rt’。这意味这这些进程运行在实时态。
  • NI:进程的 nice 值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
  • VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。
  • RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。
  • SHR:SHR 是进程使用的共享内存。共享内存大小,单位 kb
  • S:这个是进程的状态。它有以下不同的值:
    • D – 不可中断的睡眠态。
    • R – 运行态
    • S – 睡眠态
    • T – 被跟踪或已停止
    • Z – 僵尸态
  • :自从上一次更新时到现在任务所使用的 CPU 时间百分比。
  • :进程使用的可用物理内存百分比。
  • :任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒。
  • COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
  1. 交互命令 – ‘h’帮助命令

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础

监控 Java 线程数:

监控网络客户连接数:

三、vmstat

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
  • 2 表示每个两秒采集一次服务器状态
  • 1表示只采集一次。

结构说明:

  • r :表示运行队列(就是说多少个进程真的分配到 CPU),我测试的服务器目前 CPU 比较空闲,没什么程序在跑,当这个值超过了 CPU 数目,就会出现 CPU 瓶颈了。这个也和 top 的负载有关系,一般负载超过了 3 就比较高,超过了 5 就高,超过了 10 就不正常了,服务器的状态很危险。top 的负载类似每秒的运行队列。如果运行队列过大,表示你的 CPU 很繁忙,一般会造成 CPU 使用率很高。
  • b:表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
  • swap:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
  • free:空闲的物理内存的大小,我的机器内存总共 8G,剩余 3415M。
  • buff:Linux/Unix 系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
  • cache:cache 直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
  • si:每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
  • so:每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同上。
  • bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte,我本机上没什么 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(机器在做压力测试,性能表现不佳)。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
  • sy:系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁。
  • id:空闲 CPU时间,一般来说,,一般我认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy是系统 CPU 使用率。
  • wt:等待 IO CPU 时间。注意:wa 的值高时,说明 IO等 待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

四、iostat

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
  • 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 响应时间应该低于 5 ms,如果大于 10 ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm:表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢。
  • %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔 1 秒,该设备有 0.8 秒在处理IO,而 0.2 秒闲置,那么该设备的 ,所以该参数暗示了设备的繁忙程度
  • 一般地,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

常见用法:

注意点:

  • 网卡的大吞吐量可能导致更多的 cup
  • 大量的 cup 开销又会增加更多内存使用请求
  • 大量内存与磁盘的请求可能导致更多的 cpu 以及 IO 问题

五、free

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
界面相关说明:
  • 界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

  • 中间的 这两个左右箭头,表示的是流量的方向。

  • TX:发送流量

  • RX:接收流量

  • TOTAL:总流量

  • Cumm:运行 iftop 到目前时间的总流量

  • peak:流量峰值

  • rates:分别表示过去 2s 10s 40s 的平均流量

常用的参数:

  • -i 设定监测的网卡,如:# iftop -i eth1

  • -B 以bytes为单位显示流量(默认是bits),如:# iftop -B

  • -n 使host信息默认直接都显示IP,如:# iftop -n

  • -N 使端口信息默认直接都显示端口号,如: # iftop -N

  • -F 显示特定网段的进出流量,如# iftop -F 100.100.30.25 或# iftop -F 100.100.30.25 /255.255.255.0

  • -h(display this message),帮助,显示参数信息

  • -p 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

  • -b 使流量图形条默认就显示;

  • -f 这个暂时还不太会用,过滤计算包用的;

  • -P 使 host 信息及端口信息默认就都显示;

  • -m 设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
    iftop(注意大小写)

常用操作:

  • 按 h 切换是否显示帮助;

  • 按 n 切换显示本机的 IP 或主机名;

  • 按 s 切换是否显示本机的 host 信息;

  • 按 d 切换是否显示远端目标主机的 host 信息;

  • 按 t 切换显示格式为 2 行/ 1 行/只显示发送流量/只显示接收流量;

  • 按 N 切换显示端口号或端口服务名称;

  • 按 S 切换是否显示本机的端口信息;

  • 按 D 切换是否显示远端目标主机的端口信息;

  • 按 p 切换是否显示端口信息;

  • 按 P 切换暂停/继续显示;

  • 按 b 切换是否显示平均流量图形条;

  • 按 B 切换计算 2 秒或 10 秒或 40 秒内的平均流量;

  • 按 T 切换是否显示每个连接的总流量;

  • 按 l 打开屏幕过滤功能,输入要过滤的字符,比如 ip,按回车后,屏幕就只显示这个 IP 相关的流量信息;

  • 按 L 切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

  • 按 j 或按 k 可以向上或向下滚动屏幕显示的连接记录;

  • 按 1 或 2 或 3 可以根据右侧显示的三列流量数据进行排序;

  • 按 > 根据远端目标主机的主机名或IP排序;

  • 按 o 切换是否固定只显示当前的连接;

  • 按 f 可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

  • 按 ! 可以使用 shell 命令,这个没用过 !没搞明白啥命令在这好用呢!

  • 按 q 退出监控。

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux进阶新增用户24804 人正在系统学习中

性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础 微信公众号 性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础 性能/测试开发/运维,关注发现更多干货。

来源:zuozewei

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月8日
下一篇 2021年6月8日

相关推荐