/images/hugo/avatar.png

5.4 pidstat

pidstat 命令

pidstat

pidstat options [ interval [ count ]]

  • 作用: 监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况
  • 内容参数:
    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的IO使用情况
    • -w:显示每个进程的上下文切换情况
    • -t:显示选择任务的线程的统计信息外的额外信息,显示线程统计信息时,必须使用
  • 过滤参数:
    • -l:显示命令名和所有参数
    • -p:指定进程号
    • -T { TASK | CHILD | ALL } 这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

pid -u

1
2
3
4
5
6
 pidstat -u 2 1
Linux 3.10.0-862.el7.x86_64 (ZS-ISP) 	03/10/2020 	_x86_64_	(1 CPU)

04:34:07 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:34:09 PM     0       926    0.51    0.00    0.00    0.51     0  python
04:34:09 PM     0      1100    0.51    0.00    0.00    0.51     0  docker-containe

输出:

5.2 Sar

sar 命令

/images/linux_pf/linux_observability_sar.png

1. sar

sar [options] [-A] [-o file] t [n]

  • 作用:查看系统各种使用信息
  • 控制参数:
    • -o file:将命令结果以二进制格式存放在文件中
    • t:采样间隔
      • =0 :表示统计系统启动以来的平均值
      • t被设置,n未被设置,会按照时间间隔循环输出
    • n:采样次数,可选,默认值是1
  • 内容参数:
    • -A:等于 -bBdFHqSvwWy -I SUM -m ALL -n ALL -r ALL -u ALL -I ALL -P ALL 显示所以内容
    • CPU统计信息:
      • -u:CPU利用率
      • -q: 查看系统平均负载
      • -w: 统计任务创建和上下文切换
    • 内存统计信息:
      • -B:换页的统计信息
      • -H: 大页面统计信息
      • -r:内存使用率
      • -R: 内存分配和释放速率统计信息
      • -S: 交换空间统计信息
      • -W:swap分区交换速率统计信息
    • 磁盘统计信息
      • -b:磁盘 IO 传送速率
      • -d:块使用信息
      • -I:中断统计信息
    • 网络统计信息:
      • -n: 统计网络使用情况

2. CPU 统计信息

2.1 sar -u

sar -u -P { cpu_list | ALL }

5.1 top

top 命令

top

top [options]

  • 选项:
    • -b:批处理模式
    • -n max:设置迭代数量,通常与 -b 一起使用
    • -d:屏幕刷新间隔
    • -u user:指定用户名
    • -p pid(s):指定进程
  • 交互命令:
    • h:显示帮助画面,给出一些简短的命令总结说明
    • k:终止一个进程
    • i:忽略闲置和僵死进程,这是一个开关式命令
    • q:退出程序
    • r:重新安排一个进程的优先级别
    • S:切换到累计模式
    • l:切换显示平均负载和启动时间信息
    • m:切换显示内存信息
    • t:切换显示进程和CPU状态信息
    • c:切换显示命令名称和完整命令行
    • M:根据驻留内存大小进行排序
    • P:根据CPU使用百分比大小进行排序
    • T:根据时间/累计时间进行排序
    • w:将当前设置写入~/.toprc文件中
  • 缺陷:
    • top 自身的 CPU用量可能会变得很大,因为 top 会遍历 /proc 内的很多进程项目
    • top 会对 /proc 做快照,因此会错过一些寿命较短的进程,这些进程在快照之前已经退出了
    • 可以使用 atop 替代top,它使用进程核算技术来捕获短寿命进程并显示,也可以使用 pidstat 捕获短时进程

指标含义

1
2
3
4
5
6
7
8
9
top - 14:58:20 up  4:33,  3 users,  load average: 0.09, 0.11, 0.13
Tasks: 252 total,   3 running, 249 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.5 us,  0.8 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.8 si,  0.0 st
KiB Mem : 16267424 total,  2198240 free, 12617508 used,  1451676 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3264332 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND            
 3653 analyzer  20   0 3214268 611932  17464 S  2.4  3.8   6:45.42 java               
 2994 analyzer  20   0 5456164 108580   9244 S  0.8  0.7   0:11.13 java

系统运行时间

1
top - 14:58:20 up  4:33,  3 users,  load average: 0.09, 0.11, 0.13

输出:

5 高级工具包

从本文开始我们将进入Linux性能优化的第二阶段,高级工具包。

1. 内容概要

这一部分我们将分成两个部分,介绍如下工具的使用:

  1. 高级命令:
    • top
    • sar
    • pidstat
    • ps
  2. 高级工具包
    • perf-tool
    • bcc
    • dtrace-toolkit
    • systemtap-lwt
  3. 容器分析工具

4.18 监控系统构建

我们不能总是去当救火队员,更重要的是监控系统。

1. 监控系统

线上的系统 24 小时运转,有一些问题稍纵即逝,我们总不能 24 小时盯着。对于线上业务更重要的是一套完备的监控系统,把系统和应用程序的运行状况监控起来,并定义一系列的策略,在发生问题时第一时间告警通知。

4.16 C10K 与网络I/O模型

各种网络I/O模型是面试的必考考点,那么到底有哪些I/O模型,C10K 问题到底又是怎么解决的呢?

1. C10K问题

所谓 C10K 问题就是如何在单机中同时处理 1 万个请求(并发连接 1 万)的问题。从资源上来说,对 2GB 内存和千兆网卡的服务器来说,同时处理 10000 个请求,只要每个请求处理占用不到 200KB(2GB/10000)的内存和 100Kbit (1000Mbit/10000)的网络带宽就可以。所以,物理资源是足够的,接下来自然是软件的问题,特别是网络的 I/O 模型问题。