Linux性能系统学习之监控工具

2023-12-13 04:37:17

前言

在实际产品开发过程中遇到一些莫名其妙的问题,比如swap交换分区随着时间增多影响到系统调用,或CPU占用以及内存的监测等,所以有必要系统了解Linux的性能问题。


linux性能度量标准

  • 处理器度量标准

    • CPU使用率
    • 用户进程消耗CPU的时间
    • 内核操作消耗CPU的时间
    • 等待
    • CPU空闲时间
    • Nice消耗CPU时间
    • 平均负载
    • 可运行的进程
    • 阻塞的进程
    • 上下文切换
    • 中断
  • 内存度量标准

    • 空闲内存
    • 使用的swap
    • 缓冲和缓存
    • Slab
    • **活跃与非活跃内存 **。
  • 块设备度量标准

    • I/O等待
    • 平均队列长度
    • 平均等待时间
    • 每秒传输
    • 每秒读取/写入块的数量
    • 每秒读取/写入的字节
  • 网络接口度量标准

    • 收和发送的数据包
    • 接收和发送的字节。 这个指标描述了一个给定网络接口接收和发送的字节数。
    • 每秒钟的冲突数量 。 这个值给出了在网络上连接的每个接口发出冲突的相对数量。如果发生持续冲突通常要关注网络基础设施的问题,而不是服务器。
    • 丢弃的数据包 。已经被内核丢弃的数据包的统计数。丢弃的原因可能是由于防火漆配置,也可能是由于缺乏网络缓冲区。
    • 溢出
    • 错误

监控工具

工具最有用的工具功能
top提供运行系统的动态实时试图
uptime显示系统平均负载
ps/pstree提供当前进程列表
free显示系统中空闲内存和已使用内存的数量
mpstat报告处理器相关的统计数据
vmstat报告进程、内存、磁盘、系统、cpu的统计信息
iostat报告cpu统计数据,还有设备和分区的输入、输出统计数据
netstat,ss显示相关网络统计信息
sar收集报告系统活动信息
numastat显示每个NUMA节点的内存统计信息
pmap报告一个进程的内存映射
iptraf交互式局域网监控程序
tcpdump/wireshark用来捕捉和分析网络流量
straceltrace系统调用和库调用跟踪程序
gnuplot命令行绘图工具
Gnome System MonitorGnome桌面环境的图形性能分析工具
KDE System GuardKDE任务管理器和性能监控器

top

  • 系统摘要信息
    top - 15:34:43 up 21:09, 2 users, load average: 1.22, 1.24, 1.37
  • 任务和CPU状态
    • Tasks: 235 total/*总共任务数量*/, 1 running/*正在运行的任务数*/, 234 sleeping/*睡眠*/, 0 stopped/*中止*/, 0 zombie/*僵尸状态数*/
    • %Cpu(s): 8.5 us(c.1), 13.1 sy(c.2), 0.0 ni(c.3), 64.9 id(c.4), 0.0 wa(c.5), 12.7 hi(c.6), 0.8 si(c.7), 0.0 st(c.8)
      c.1:运行非nice的用户进程时间
      c.2:运行内核进程的时间
      c.3:运行nice的用户进程时间
      c.4:空闲花费的时间
      c.5:IO等待花费的时间
      c.6:服务硬件中断花费的时间
      c.7:服务软件中断花费的时间
      c.8:通过pypervisor虚拟机偷走的时间
  • 内存使用情况
    • KiB Mem : 4059384 total, 135604 free, 1840076 used, 2083704 buff/cache
    • KiB Swap: 2029680 total, 1789196 free, 240484 used. 2001496 avail Mem
  • 内核管理的任务列表
    • PIDd.1 USER``d.2 PRd.3NId.4VIRTd.5RESd.6SHRd.7 Sd.8 %CPUd.9 %MEMd.10 TIME+d.11COMMANDd.12
      d.1:进程标识符
      d.2:任务拥有者(或启用者)的有效用户名
      d.3:任务的优先级
      d.4:任务的nice值。正数nice值意味着较高的优先级
      d.5:任务使用的虚拟内存的总量,包括所有代码,数据,共享库交换出的分页
      d.6:常驻内存的大小。任务所使用的非交换的物理内存。rescode+data
      d.7:任务所使用的共享内存量。它只反映了可与其他进程共享的内存。
      d.8:进程状态。D:不可中断的睡眠R:正在运行 S:睡眠 T:跟踪或停止 Z: 僵尸
      d.9:CPU总时间的百分比
      d.10:任务当前使用的可用物理内存
      d.11:自系统启动开始任务所使用的总共CPU时间
      d.12:显示用于启动任务的命令行或相关程序的名称
  • 热键 详细按h查看

uptime

16:23:33a. up 21:58b., 2 usersc., load average: 0.29, 1.00, 1.23d.
a.: 系统时间 b.:cpu时间 c.:当前用户登录数 d.:服务器在过去1分钟,5分钟和15分钟的系统平均负载

  • 系统平均负载是可运行状态进程或不可中断状态进程的平均数。处在可运行状态的进程要么是正在使用CPU,要么是等待使用CPU。处在不可中断状态的进程正在等待一些I/O访问,例如等待磁盘。平均值有3个时间间隔。因为系统中CPU的数量、平均负载不是规范化的,所以,平均负载为1意味着一个单CPU系统始终是有负载的,在一个4核CPU系统上则意味着它有75%的空闲时间。

  • 平均负载最佳值为1,这意味着每个进程都能立刻访问CPU,并且没有丢失CPU周期。对于单(核)处理器工作站,1或2是可以接受的,而在多处理器服务器上你可能会看到8到10的数字(单核CPU负载是2,4核CPU负载可能是8)。

  • 可以使用uptime确定问题出在服务器还是网络。例如,如果一个网络应用程序运行很糟糕,则可以运行uptime,查看系统负载是否很高。如果没有,则这个问题很可能关系到你的网络,而不是你的服务器。

ps/pstree

  • 查看进程号的几种方式
ps -ef |grep P1 |grep -v color |awk '{print $2}' 
ps -C P1 -o pid=
pgrep  P1
  • pstree
    • 可能使用的最多的是确认多进程和当前进程有多少线程吧。pstree -p
      一个main函数中增加2个线程确认如下,main作为一个进程也是一个线程,增加复杂线程或内存使用多样化的线程中可以增加线程名,后续方便排查问题。
      在这里插入图片描述

free

基本的用法不在此展开,只做一些自己开发过程中的需求记录。

  • 在使用过程中需要申请大块内存,可能导致OOM问题,所以在申请过程中按照剩余内存的.9系数申请 ,
    代码获取剩余内存方式:
    • 使用popen方式获取系统调用返回值,然后解析返回的剩余内存
    • 读取虚拟/proc/meminfo获取剩余内存

mpstat

因为开发板没有该命令,因此再次不做更新记录

vmstat

vmstat用来报告关于进程,内存,分页,块io,中断,cpu活动的信息。
vmstat命令显示平均数据或实际样本。通过vmstat命令提供一个采样频率和采样次数可启用采样模式。

  • vmstat -n {n为采样频率}

第一行产生的报告是自上次重启之后的平均值,因此应该考虑排除它。可以使用delay给出采样周期的长度报告更多的信息。进程和内存的报告是瞬时的。
运行结果

  • Procs

    • r, 可运行进程的数量(正在运行或等待运行时间。)
    • b, 不可中断睡眠状态进程的数量。
  • memory

    • swpd,虚拟内存使用的数量。
    • free,用作空闲内存的数量。
    • buff,用作缓冲区的内存数量。
    • cache,用作缓存的内存数量。
    • nact,非活跃内存的数量(使用-a选项)。
    • active,活跃内存的数量(使用-a选项)。
  • swap

文章来源:https://blog.csdn.net/nc_linux/article/details/134808165
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。