性能测试第十八课-linux服务器性能分析基础命令

 性能分析命令

  • top命令: 现在市面有很多 top 命令的变种。 atop btop htop....
    • top是性能分析使用第1个命令,也是 大家 用的最多性能分析命令。
    • top: 常用的性能分析工具,能够实时显示系统中各个进程\线程的资源占用状况
    • 默认是显示 进程
    • 默认是 3秒 自动刷新一次数据
    • top - 15:25:38当前系统时间
    •  up  1:11, 启动运行了多长时间。 ------这个时间越长说明,服务器越稳定。 说明,我们服务器有多长时间没有去重启。
    • 4 users, 有多少个终端用户连接, 不代表多少个账户
  •  load average: 0.03, 0.75, 1.20========服务器性能的重点关注值
    • load average: 系统平均负载,
      • 怎么来的? 系统繁忙是时间 与 系统不繁忙的时间 之比
        • 系统繁忙: CPU繁忙 + io繁忙
    • loadaverage 它是由 CPU 和 io 两项关键数据来决定的。
      • 系统负载 = CPU负载 + io负载
    • 三个数值:0.03, 0.75, 1.20
      • 代表着系统过去1分钟的平均负载、 系统过去5分钟的平均负载、 系统过去15分钟的平均负载
    • 第1个值,如果很高,说明 系统过去一分钟 系统负载很大,系统很繁忙。
      • 高? 怎么判断它为高?
      • 一般来说,数值如果大于 cpu数量的80%, 数值比较高
      • 如果达到 5倍cpu数量,说明系统负载非常大了。

        • cpu数量,怎么获取
          • top命令中, 按下 键盘 1(如下图中CPU数量为16,那么16*0.8=12.8,如果第一个值大于12.8则说明系统负载很大,如果大于80则说明系统负载非常大)
    • 第1个值 & 第2个值,一起看(过去1分钟负载和,过去5分钟负载做比较)
      • 第1个值 > 第2个值
        • 说明,系统目前负载正在上升,有上升趋势,可能还会继续上升 -----现在的系统负载比过去要高。
        • 说明现在系统是更加繁忙。
      • 第1个值 < 第2个值
        • 说明,系统的负载在慢慢下降。现在的负载,在逐步恢复正常。
  • IO: 换入换出
    • 由三部分组成: 磁盘的换入换出、 外设的换入换出、内部元件数据转移
      • 磁盘的换入换出: 磁盘读写
      • 外设的换入换出: 外部设备换入换出、网络数据换入换出
      • 内部元件数据转移:CPU与内存数据交换、 内存与磁盘数据交换、网络数据转为内存.....
  • cpu负载,怎么来算的?

    • cpu的繁忙 & cpu的不繁忙
    • %Cpu(s): 所有的 cpu的合计统计数据    总计100(等于后面所有指标之和)
      • 所有大数据是 所有数量cpu的总情况
      • &cpu0 这种情况,一行的数据,是展示当前这个一个cpu的数据
      • 3.0 us, CPU的用户态使用时间占比 --------cpu繁忙
        • 用户 CPU 时间(以百分比表示),在某些做加密解密很频繁的服务器上,可以看到 us 接近 100,r 运行队列达到 80 的情况(机器在做压力测试,性能表现不佳)。
        • 平常写的代码运算时间一般会在这下面
        • 这个数值高代表代码逻辑计算较多-----表示代码的逻辑可能写的过于复杂了
      • 2.0 sy, cpu的系统态使用时间占比 ---------cpu繁忙指标
        • 系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁。
        • (底层算法运算时间一般会在这下面统计)
      • 0.0 ni,  -nice的意思,nice是什么呢,每个linux进程都有个优先级,优先级高的进程有优先执行的权利,这个叫做pri。进程除了优先级外,还有个优先级的修正值。即比如你原先的优先级是20,然后修正值为-2,那么你最后的进程优先级为18。这个修正值就叫做进程的nice值。(一般来说pr-ni = 20)
      • id(idle,cpu空闲指标):空闲 CPU 时间,一般来说,id + us + sy = 100, 一般认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy 是系统 CPU 使用率。
      • wa:指的是CPU等待磁盘写入完成的时间,就是说前提是要进行IO操作,在进行IO操作的时候,CPU等待时间。比如上面那个程序,最后一步,从系统空间到dst硬盘空间的时候,如果程序是阻塞的,那么这个时候cpu就要等待数据写入磁盘才能完成写操作了。所以这个时候cpu等待的时间就是wa。
        • 当我们io繁忙时,这个数值一般会非常明显
      • hi,hardirq 硬中断
        • 表示 CPU 处理硬中断所花费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器参与,特点是快速执行。
      • si, softirq软中断  
        • 表示 CPU 处理软中断所花费的时间。软中断是由软件程序(如网络收发、定时调度等)发出的中断信号,特点是延迟执行。
        • 如果程序都没什么问题,那么是没有hi和si的,但是实际上有个硬中断和软中断的概念。比如硬中断,cpu在执行程序的时候,突然外设硬件(比如硬盘出现问题了)机器需要立刻通知cpu进行现场保存工作。这个时候会cpu会出现上下文切换。就是cpu会有一部分时间会被硬中断占用了,这个时间就是hi。相类似,si是软中断的cpu占用时间,软中断是由软件的指令方式触发的。
      •  st 管理者占用时间:偷取,是专门对虚拟机来说的,一台物理是可以虚拟化出几台虚拟机的。在其中一台虚拟机上用top查看发现st不为0,就说明本来有这么多个cpu时间是安排给我这个虚拟机的,但是由于某种虚拟技术,把这个cpu时间分配给了其他的虚拟机了。这就叫做偷取。
    • Tasks: 165 total, 当前的总任务数
      • 按下H, Threads 242 total 当前总线程数

        • 任何一个进程,都至少有1个线程
        • 1 running, 当前正在运行
        • 与进程列表中 S列中 R 对应
      • 164 sleeping, 当前正处于休眠
        • 与进程列表中 S列中 S 对应
      • 0 stopped, 停止状态
        • 与进程列表中 S列中 T 对应
      • 0 zombie 僵尸状态
        • 与进程列表中 S列中 Z 对应

内存信息

  • KiB Mem : 1882196 total总内存, 1086060 free空闲内存,  438044used被占用了, 358092 buff缓冲区/cache缓存
    • 缓冲区是磁盘虚拟出来的,作用就是加快磁盘的读取速度
    • 缓存也是磁盘虚拟出来的,作用是加快从内存进行数据交换的速度
  • KiB单位,按下E,可以改变 内存单位, 小写e,改变进程列中内存相关的三列的单位
    • VIRT 虚拟内存 ----记录内存中,各种数据的位置
      • 虚拟内存,假的内存,并不占用 物理内存
      • 是由 磁盘虚拟来的
      • 虚拟内存一般 是 物理内存的2倍
    • RES 物理内存
    • SHR 共享内存
  • KiB Swap: 4063228 total, 4063228 free, 0 used. 1289084 avail Mem 可用内存
  • swap 交换分区 -----干交换数据的活
    • 交换什么数据? ----交换内存中的数据。
      • 当内存条内存空不够用了。 把一些内存条中数据,临时转移到 swap分区, 被转移的数据,一般是当前使用频率不高数据。
    • 交换分区,是由磁盘虚拟来的----它速度 比 内存条中内存速度慢。

  • 进程列表, 默认都是进程
  • PID   USER   PR   NI   VIRT    RES     SHR        S   %CPU   %MEM  TIME+   COMMAND
  • 1018  root      20    0   381152  41120   15952     S   0.3          2.2       0:00.30    containerd
    • pid 进程id
    • USER 进程的归属者, 这个进程启动用户
    • PR 进程优先级
    • NI 进程优先级切换
    • VIRT RES SHR ----内存相关(见上面橙色字体)
    • %CPU 这个进程占用了多少的cpu使用率 -----这个数值,在CPU为多核时候,是可以超过100
    • 进程列表中,默认排序规则,是根据 %CPU 数值从高到低的排序
    • %MEM 这个进程占用内存率
    • COMMAND 进程服务名称
  • 这些列,是可以被调整
  • 参数 用法
  • Z B E e Z颜色、B加粗、E系统内存单位转换、 e进程内存单位转换
  • l t m l 平均值、t 任务/cpu统计信息、 m 内存信息
  • 0 1 2 3 I 0 切换显示0信息、1\2\3 cpu信息
  • f F X f\F 添加\删除\订购\排序字段、 X 增加列宽度
  • L & < > L & 查找\再次查找、< > 左右移动排序
  • R H V J R 排序 H 显示线程 V 树结构展示 J列表数字(左\右对齐)
  • c i s j c 查看cmd命令 i 查看idle值 s 设置更新时间 j 列表为字符串(左\右对齐)
  • x y x 切换高亮排序字段 、y根据运行任务高亮排序
  • u u\U 用户
  • b n 数字 ----高亮显示CPU最高的几个进程(n+0 显示所有进程)
  • s\d 数字 -----改变top的数据刷新频率
  • 性能测试中,要来查看服务器资源使用情况时,第一个命令就是 top

ps 查看进程状态

  • ps -ef |grep java
  • ps aux

vmstat 虚拟内存统计的缩写,可对虚拟内存、进程、cpu活动进行监控

  • 在linux系统的性能分析命令中,有很多命令,都是用 ‘stat’结尾, 但是他们不一样。
  • vmstat、netstat 是 linux系统自带的命令
  • vmstat 1 10: 间隔1秒钟,收集一次数据,执行10次结束
  • procs 进程\线程\工作者
    • r:显示多少进程在等待 ------- 数值,告诉我们,当前有多少的进程或线程正在等待CPU的处理。 数值越大,说明现在cpu越繁忙,有大量的进程在等待cpu处理。 ------CPU数量不够
      • 看到这个数字很大,cpu不够了,说明,我们可能要考虑 增加cpu数量;
      • 或者把服务器上的一些项目\服务迁移出去。
      • 假如 r 经常大于 4 ,且 id 经常小于 40,表示中央处理器的负荷很重。
    • b: 显示多少进程在不可中断的休眠。
  • memory 内存, 列的单位是 KB
    • swpd :虚拟内存已使用的大小,如果大于 0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
    • free 空闲内存 大小
      • 性能分析时,如果 free很小,空闲内存很小,内存可能不足, 可能需要增加内存条;
      • 停止一些服务获取迁移一些服务出去
    • buff :缓冲区的大小,是由磁盘虚拟出来的,用于加快磁盘读数据的速度, Linux/Unix 系统是用来存储,目录里面有什么内容,权限等的缓存
    • cache :缓存的大小,直接用来记忆我们打开的文件,给文件做缓冲。(这里是 Linux/Unix 的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached 会很快地被使用。)
  • swap:是由磁盘虚拟,用于临时存放内存条中的数据
  • si 每秒有多少块正在被换入内存:
    • 每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
  • so 正在被换出到磁盘
    • 每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同样表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
  • 如果这两个列,有明显的数据,说明,我们内存不够用。在使用交换分区在转移内存数据
  • io 是 磁盘数据读写:
    • bi 显示了多少块从块设备读取(bi)),通常反映了硬盘I/O
      •  块设备(硬盘,U盘,SD卡等)每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024byte,这台服务器上没什么 IO 操作,所以一直是 0,但是我曾在处理拷贝大量数据 (2-3T) 的机器上看过可以达到 140000/s,磁盘写入速度差不多 140M 每秒
      • I/O设备大致分为两类:块设备和字符设备。块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。磁盘是最常见的块设备。
    • bo 和写出(bo)
      • 如果这两列,有明显的数据,说明有大量的磁盘操作
      • 假如 bi,bo 长期不等于 0,表示物理内存容量太小。
      • 块设备每秒发送的块数量,例如我们读取文件,bo 就要大于 0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整。
  • system 系统
    • in 中断: 每秒 CPU 的中断次数,包括时间中断
    • cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的 数目,例如在 apache 和 nginx 这种 web 服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择 web 服务器的进程可以由进程或 者线程的峰值一直下调,压测,直到 cs 到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核 空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的 CPU 大部分浪费在上下文切换,导致 CPU 干正经事的 时间少了,CPU 没有充分利用,是不可取的。
  • cpu:us,sy,id,wa,st   这些参数上面已经介绍过了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值