• linux性能监控命令(vmstat、sar、iostat、netstat)


    1.常用系统命令
    Vmstat、sar、iostat、netstat、free、ps、top等

    2.常用组合方式
    • 用vmstat、sar、iostat检测是否是CPU瓶颈
    • 用free、vmstat检测是否是内存瓶颈
    • 用iostat检测是否是磁盘I/O瓶颈
    • 用netstat检测是否是网络带宽瓶颈


    一、Vmstat
    1、vmstat 5 5:每5秒监控一次,总共5次

    r:表示运行队列(就是说多少个进程真的分配到CPU),一般运行队列多大,表示CPU很繁忙,导致CPU使用率过高
    b:表示阻塞的进程
    swpd :虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
    cs: 每秒上下文切换次数
    us: 用户CPU时间
    sy: 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
    id : 空闲 CPU时间
    wt :等待IO CPU时间
    free :空闲的物理内存的大小
    buff: 设备和设备之间的缓冲 。 Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
    cache : cpu和内存之间的缓冲
    si: 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
    so :每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
    bi :块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
    bo:块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
    wa :等待IO CPU时间。
    us: 用户CPU时间
    sy: 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
    id :空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

    重点参数 r,b,swpd,free,buff,cache,si,so,bi,bo

    性能分析信息:

    IO/CPU/men连锁反应:
    1.free急剧下降
    2.buff和cache被回收下降,但也无济于事
    3.依旧需要使用大量swap交换分区swpd
    4.等待进程数,b增多
    5.读写IO,bi bo增多
    6.si so大于0开始从硬盘中读取
    7.cpu等待时间用于 IO等待,wa增加


    内存不足:
    1.开始使用swpd,swpd不为0
    2.si so大于0开始从硬盘中读取


    io瓶颈:
    1.读写IO,bi bo增多超过2000
    2.cpu等待时间用于 IO等待,wa增加 超过20
    3.sy 系统调用时间长,IO操作频繁会导致增加 >30%
    4.wa io等待时间长
    iowait% <20% 良好
    iowait% <35% 一般
    iowait% >50%
    5.进一步使用iostat观察


    CPU瓶颈:load,vmstat中r列
    1.反应为CPU队列长度
    2.一段时间内,CPU正在处理和等待CPU处理的进程数之和,直接反应了CPU的使用和申请情况。
    3.理想的load average:核数*CPU数*0.7
    CPU个数:grep 'physical id' /proc/cpuinfo | sort -u
    核数:grep 'core id' /proc/cpuinfo | sort -u | wc -l
    4.超过这个值就说明已经是CPU瓶颈了


    CPU瓶颈
    1.us 用户CPU时间高超过90%
    涉及到web服务器,cs 每秒上下文切换次数
    例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
    1.cs可以对apache和nginx线程和进程数限制起到一定的参考作用
    2.我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了
    较好的趋势:主要是 swap使用少,swpd数值低。si so分页读取写入数值趋近于零

     二、iostat
    主要用于监控系统设备的io负载情况
    iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

    1、iostat -d -k 2 4:参数-d表示显示设备磁盘的使用状态;-k表示某些使用block为单位的列强制使用kilobytes为单位,每2秒监控一次,共6次

    tps:该设备每秒的传输次数。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
    kB_read/s:每秒从设备(drive expressed)读取的数据量;
    kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
    kB_read:读取的总数据量;
    kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes

    2、iostat -c 2 4:监控cpu

    三、sar
    sar分析包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等,sar命令有sysstat安装包安装。

    命令格式: sar [options] [-A] [-o file] t [n]
    其中:
    t:采样间隔,n为采样次数,默认值是1
    -o file:表示将命令结果以二进制格式存放在文件中,file 是文件名。
    options 为命令行选项,sar命令常用选项如下:

    -A:所有报告的总和
    -u:输出CPU使用情况的统计信息
    -v:输出inode、文件和其他内核表的统计信息
    -d:输出每一个块设备的活动信息
    -r:输出内存和交换空间的统计信息
    -b:显示I/O和传送速率的统计信息
    -a:文件读写情况
    -c:输出进程统计信息,每秒创建的进程数
    -R:输出内存页面的统计信息
    -y:终端设备活动情况
    -w:输出系统交换活动信息

    1、sar -u -o test_sar 5 10:每5s采样一次,连续采样10次,观察cpu使用情况,并将采样结果以二进制形式存入test_sar中(查看二进制文件test中的内容,sar命令:sar -u -f test_sar)


    2、sar -u 2 5:输出cpu使用情况和统计信息

    输出说明:

    CPU:all 表示统计信息为所有 CPU 的平均值。
    %user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
    %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
    %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
    %iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
    %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
    %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
    1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
    2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
    3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU

    四、netstat

    netstat命令是一个监控TCP/IP网络的非常有用的工具

    语法选项
    netstat [选项]

    > -a或--all:显示所有连线中的Socket;
    > -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
    > -c或--continuous:持续列出网络状态;
    > -C或--cache:显示路由器配置的快取信息;
    > -e或--extend:显示网络其他相关信息;
    > -F或--fib:显示FIB;
    > -g或--groups:显示多重广播功能群组组员名单;
    > -h或--help:在线帮助;
    > -i或--interfaces:显示网络界面信息表单;
    > -l或--listening:显示监控中的服务器的Socket;
    > -M或--masquerade:显示伪装的网络连线;
    > -n或--numeric:直接使用ip地址,而不通过域名服务器;
    > -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
    > -o或--timers:显示计时器;
    > -p或--programs:显示正在使用Socket的程序识别码和程序名称;
    > -r或--route:显示Routing Table;
    > -s或--statistice:显示网络工作信息统计表;
    > -t或--tcp:显示TCP传输协议的连线状况;
    > -u或--udp:显示UDP传输协议的连线状况;
    > -v或--verbose:显示指令执行过程;
    > -V或--version:显示版本信息;
    > -w或--raw:显示RAW传输协议的连线状况;
    > -x或--unix:此参数的效果和指定"-A unix"参数相同;
    > --ip或--inet:此参数的效果和指定"-A inet"参数相同。


    说明:

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

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

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

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

    套接口类型:

    > -t :TCP
    > -u :UDP
    > -raw :RAW类型
    > --unix :UNIX域类型
    > --ax25 :AX25类型
    > --ipx :ipx类型
    > --netrom :netrom类型

    状态说明:

    > LISTEN:侦听来自远方的TCP端口的连接请求
    > SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
    > SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
    > ESTABLISHED:代表一个打开的连接
    > FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
    > FIN-WAIT-2:从远程TCP等待连接中断请求
    > CLOSE-WAIT:等待从本地用户发来的连接中断请求
    > CLOSING:等待远程TCP对连接中断的确认
    > LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
    > TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
    > CLOSED:没有任何连接状态

    转:https://www.cnblogs.com/xieshengsen/p/6618993.html、http://lovesoo.org/linux-sar-command-detailed.html、https://www.cnblogs.com/ftl1012/p/netstat.html 



  • 相关阅读:
    Vue.js学习笔记(8)拖放
    Vue.js学习笔记(7)组件详解
    使用了与请求的协议不兼容的地址的解决办法
    修改machine.config遇到System.Net.ServicePointManager 的类型初始值设定项引发异常
    未找到路径“/Agent/SissQrTemplate/AddN”的控制器或该控制器未实现 IController。
    C# .NET 2.0 判断当前程序进程是否为64位运行时 (x64)
    荣耀9开启虚拟按键
    C# .NET 4.5 将多个文件添加到压缩包中
    开IE时 暴卡
    VMware Workstation 安装 mac OS 时遇到 不可恢复错误: (vcpu-0)
  • 原文地址:https://www.cnblogs.com/heishuichenzhou/p/10609059.html
Copyright © 2020-2023  润新知