1、pidstat
功能:用于监控全部或指定进程的 CPU、内存、线程、设备IO 等系统资源的占用情况。Pidstat 第一次采样显示自系统启动开始的各项统计信息,后续采样将显示自上次运行命令后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
语法:pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
参数:
-u:默认参数,显示各进程的 CPU 使用统计
-r:显示各进程的内存使用统计
-d:显示各进程的 IO 使用情况
-p:指定进程号,ALL 表示所有进程
-C:指定命令
-l:显示命令名和所有参数
2.stress: Linux 的一个压力测试工具,可以对 CPU、Memory、IO、磁盘进行压力测
试。
语法:stress [OPTION [ARG]]
参数:
-c, --cpu N:产生 N 个进程,每个进程都循环调用 sqrt 函数产生 CPU 压力。
-i, --io N:产生 N 个进程,每个进程循环调用 sync 将内存缓冲区内容写到磁盘上,产
生 IO 压力。通过系统调用 sync 刷新内存缓冲区数据到磁盘中,以确保同步。如果缓
冲区内数据较少,写到磁盘中的数据也较少,不会产生 IO 压力。在 SSD 磁盘环境中
尤为明显,很可能 iowait 总是 0,却因为大量调用系统调用 sync,导致系统 CPU 使用
率 sys 升高。
-m, --vm N:产生 N 个进程,每个进程循环调用 malloc/free 函数分配和释放内存。
--vm-bytes B:指定分配内存的大小
--vm-keep:一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新
分配内存)
-d, --hdd N:产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删
除文件)
--hdd-bytes B:指定文件大小
-t, --timeout N:在 N 秒后结束程序
-q, --quiet:程序在运行的过程中不输出信息
3.cgroups 信息查看
①cgroups 版本查看:cat /proc/filesystems |grep cgroup
如果看到 cgroup2,表示支持 cgroup v2
②cgroups 子系统查看:cat /proc/cgroups
③cgroups 挂载信息查看: mount |grep cgroup
④查看一个进程上的 限制:cat /proc/$$/cgroup
⑤比如 cpu 在 user.slice,我们可以找到这个目录,里面有对 init 进程的详细限制信息:
ll /sys/fs/cgroup/cpu/user.slice/
4.使用 cgroups 对内存进行控制
① 创建内存的 cgroup,很简单我们进入到 cgroup 的内存控制目录/sys/fs/cgroup/memory,我们创建目录 test_memory
②可以看到内存限制文件已经自动在 test_memory 中创建完成了,cgroups 文件系
统会在创建文件目录的时候自动创建相应的配置文件
③配置 cgroup 的策略为最大使用 20M 内存
④4. 启动 1 个消耗内存的进程,每个进程占用 50M 内存
⑤ 打开一个新的 shell 窗口 B 窗口,使用 pidstat 查看状态,红色为进程 id
⑥打开一个新的 shell C 窗口,将进程 id 移动到我们的 cgroup 策略
⑦可以看到进程无法申请到足够内存退出
可以看到进程消失了
5.使用 cgroups 对 cpu 进行控制
①创建内存的 cgroup,很简单我们进入到 cgroup 的内存控制目录
/sys/fs/cgroup/cpu,我们创建目录 test_cpu,可以看到系统会自动为我们创建 cgroup
的 cpu 策略
②打开新的 shell 窗口 B 窗口,使用 stress 模拟一个任务,cpu 使用率为 100
③可以看到 cpu 的使用率为 100%
④打开新的 shell 窗口 C 窗口,我们设置 cproup 的 cpu 使用率为 30%,cpu 使用率
的计算公式 cfs_quota_us/cfs_period_us
1)cfs_period_us:cfs_period_us 表示一个 cpu 带宽,单位为微秒。系统总 CPU 带
宽 ,默认值 100000。
2)cfs_quota_us:cfs_quota_us 表示 Cgroup 可以使用的 cpu 的带宽,单位为微秒。
cfs_quota_us 为-1,表示使用的 CPU 不受 cgroup 限制。cfs_quota_us 的最小值为
1ms(1000),最大值为 1s。
⑤我们可以看到进程的 PID 为 30788,我们将该进程放到 tasks 文件进行控制
⑥B 窗口中可以看到我们监控的 cpu 的使用率由 100%降低为 30%