简介
压测命令: stress ,一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。监测命令: mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所 有 CPU 的平均指标。pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU 、内存、 I/O 以及上下文切换等性能指标。
一 ps进程信息
ps 用一于显示系统内的所有进程。-l 或 l 采用详细的格式来显示进程状况。常用方式: ps -elf 和 ps -ef
ps -ef和ps -elf对比。
root@hehe:~# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:44 ? 00:00:02 init [5]
root 2 0 0 14:44 ? 00:00:00 [kthreadd]
root 3 2 0 14:44 ? 00:00:02 [ksoftirqd/0]
/*略*/
root@hehe:~# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 427 poll_s 14:44 ? 00:00:02 init [5]
1 S root 2 0 0 80 0 - 0 kthrea 14:44 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 14:44 ? 00:00:02 [ksoftirqd/0]
/*略*/
根据进程的名字或者其他信息,通过 grep命令找到目标进程,也可以看到进程启动脚本的全路径。如下例程,最后的grep -v "grep"表示去除包含grep的行。
root@hehe:~# ps -elf | grep "service" | grep -v "grep"
4 S root 680 632 0 80 0 - 1783 wait 14:45 ttymxc0 00:00:00 ./bin/service_loader
4 S root 685 680 27 80 0 - 31258 futex_ 14:45 ttymxc0 01:11:37 /lib/ld-linux-armhf.so.3 --library-path /home/root/bin/ /home/root/bin/device_service_server
root@hehe:~# ps -elf | grep "service" | grep -v "grep" | wc -l
2
root@hehe:~#
二 top进程cpu内存信息
top 命令用于查看活动进程的 CPU和内存信息,能够实时显示系统中各个进程的资源占用情况,可以按照 CPU、内存的使用情况和执行时间对进程进行排序。使用方式: top
如下所示,当前系统,1分钟内负载1.07 5分钟内负载0.98,15分钟内负载0.96
从输出可以看到整体的CPU占用率、CPU负载,以及进程占用CPU和内存等资源的情况。
我们可以用以下所示的 top 命令的快捷键对输出的显示信息进行转换。t :切换报示进程和 CPU 状态信息。n :切换显示内存信息。r :重新设置一个进程的优先级。系统提示用户输人需要改变的进程 PID 及需要设置的进程优先级, 然后输入个正数值使优先级降低,反之则可以使该进程拥有更高的优先级,即是在原有基础上进行 相加,默认优先级的值是100k :终止一个进程,系统将提示用户输入需要终止的进程 PID os :改变刷新的时间间隔。u :查看指定用户的进程。
top 命令查找 cpu占用率最高的程序,找到对应的PID ,top -Hp pid ,查看具体进程下的线程,比如:top -Hp 685,查看进程pid=685中的线程占用CPU情况。
三 mpstat
此命令用于实时监控系统 CPU 的一些统计信息,这些信息存放在 /proc/stat 文件中,在多核 CPU 系统里, 不但能查看所有CPU 的平均使用信息,还能查看某个特定 CPU 的信息。使用方式: mpstat [-P {cpu|ALL}] [internal [count]]当mpstat 不带参数时,输出为从系统启动以来的平均值。
root@hehe:~# ./mpstat
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
19:17:47 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19:17:47 all 29.54 0.00 1.13 0.00 0.00 0.29 0.00 0.00 0.00 69.04
root@hehe:~#
root@hehe:~# ./mpstat -P ALL
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
19:18:12 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19:18:12 all 29.64 0.00 1.13 0.00 0.00 0.29 0.00 0.00 0.00 68.94
19:18:12 0 29.64 0.00 1.13 0.00 0.00 0.29 0.00 0.00 0.00 68.94
root@hehe:~#
间隔1秒采样一次
root@hehe:~# ./mpstat 1
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
19:22:29 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19:22:30 all 32.97 0.00 5.49 0.00 0.00 1.10 0.00 0.00 0.00 60.44
19:22:31 all 26.04 0.00 6.25 0.00 0.00 8.33 0.00 0.00 0.00 59.38
19:22:32 all 26.32 0.00 4.21 0.00 0.00 5.26 0.00 0.00 0.00 64.21
^C
Average: all 28.37 0.00 5.32 0.00 0.00 4.96 0.00 0.00 0.00 61.35
Ctrl+c
root@hehe:~#
间隔1秒采样一次,采样两次,这个共采样了三个,不是两个。
root@hehe:~# ./mpstat 1 2
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
19:23:38 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19:23:39 all 26.88 0.00 6.45 0.00 0.00 3.23 0.00 0.00 0.00 63.44
19:23:40 all 28.26 0.00 7.61 0.00 0.00 5.43 0.00 0.00 0.00 58.70
Average: all 27.57 0.00 7.03 0.00 0.00 4.32 0.00 0.00 0.00 61.08
root@hehe:~#
输出参数含义
当没有参数时, mpstat 则显示系统启动以后所有信息的平均值。有 interval 时,第一行的信息自系统启 动以来的平均信息。从第二行开始,输出为前一个interval 时间段的平均信息。 输出各参数含义:
四 pidstat
pidstat 用于监控全部或指定的进程占用系统资源的情况,包括 CPU 、内存、磁盘 I/O 、进程切换、线程数等 数据。-u :表示查看 cpu 相关的性能指标-w :表示查看上下文切换情况,要想查看每个进程的详细情况,要加上 -w-t :查看线程相关的信息,默认是进程的 ; 常与 -w 结合使用 (cpu 的上下文切换包括进程的切换、线程 的切换、中断的切换)-d :展示磁盘 I/O 统计数据-p :指明进程号使用方式: pidstat [option] interval [count]使用范例: pidstat -urd -p 进程号
实例1:pidstat -w -p 685
root@hehe:~# ./pidstat -w -p 685
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
19:29:11 UID PID cswch/s nvcswch/s Command
19:29:11 0 685 0.01 0.00 ld-linux-armhf.
root@hehe:~#
这个结果中有两列内容是我们的重点关注对象。一个是 cswch ,表示每秒自愿上下文切换( voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换( non voluntary context switches)的次数。这两个概念一定要牢牢记住,因为它们意味着不同的性能问题:所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O 、内存等系 统资源不足时,就会发生自愿上下文切换。 而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切 换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
实例2:pidstat -urd -p 685
root@hehe:~# ./pidstat -urd -p 685
Linux 4.1.15 (hehe) 10/15/22 _armv7l_ (1 CPU)
##输出CPU的使用信息 -u
19:32:15 UID PID %usr %system %guest %wait %CPU CPU Command
19:32:15 0 685 29.41 1.01 0.00 0.00 30.41 0 ld-linux-armhf.
##输出内存的使用信息 -r
19:32:15 UID PID minflt/s majflt/s VSZ RSS %MEM Command
19:32:15 0 685 467.47 0.00 133228 16280 3.21 ld-linux-armhf.
##输出磁盘I/O的使用信息 -d
19:32:15 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
19:32:15 0 685 -1.00 -1.00 -1.00 0 ld-linux-armhf.
root@hehe:~#
CPU 信息%usr # 用户层任务正在使用的 CPU 百分比( with or without nice priority , NOT include time spent running a virtual processor)%system # 系统层正在执行的任务的 CPU 使用百分比%guest # 运行虚拟机的 CPU 占用百分比%CPU # 所有的使用的 CPU 的时间百分比CPU # 处理器数量Command # 命令
内存信息PID : # 进程号minflt/s: # 每秒次缺页错误次数 (minor page faults) ,次缺页错误次数意即虚拟内存地 址映射成物理内存地址产生的page fault 次数majflt/s:# 每秒主缺页错误次数 (major page faults) ,当虚拟内存地址映射成物理内存地址时,相应的page 在 swap 中,这样的 page fault 为 major page fault ,一般在内存使用紧张时产生VSZ # 该进程使用的虚拟内存 ( 以 kB 为单位 )RSS # 该进程使用的物理内存 ( 以 kB 为单位 )%MEM # 当前任务使用的有效内存的百分比Command # 任务的命令名
磁盘 I/OPID # 进程号kB_rd/s # 每秒此进程从磁盘读取的千字节数kB_wr/s # 此进程已经或者将要写入磁盘的每秒千字节数kB_ccwr/s # 由任务取消的写入磁盘的千字节数Command #命令的名字
上下文切换PID #PID 号cswch/s # 每秒自动上下文切换nvcswch/s # 每秒非自愿的上下文切换Command #命令