-l Display the process command name and all its arguments.
显示任务的完整路径和任务执行时的参数,和从/proc/fd/cmdline 中的值一样
04:25:21 PM UID PID %usr %system %guest %CPU CPU Command
......
04:25:21 PM 0 614 0.00 0.00 0.00 0.00 1 kworker/u8:0
04:25:21 PM 0 1463 0.00 0.00 0.00 0.00 2 i915/signal:0
04:25:21 PM 0 2173 0.00 0.01 0.00 0.01 3 xfsaild/dm-0
04:25:21 PM 0 2174 0.00 0.00 0.00 0.00 0 kworker/0:1H
04:25:21 PM 0 2254 0.00 0.00 0.00 0.00 1 /usr/lib/systemd/systemd-journald
04:25:21 PM 0 2276 0.00 0.00 0.00 0.00 2 /usr/sbin/lvmetad -f
04:25:21 PM 0 2295 0.00 0.00 0.00 0.00 3 kworker/3:1H
04:25:21 PM 0 2297 0.00 0.00 0.00 0.00 3 /usr/lib/systemd/systemd-udevd
04:25:21 PM 0 4428 0.00 0.00 0.00 0.00 1 xfsaild/sda2
04:25:21 PM 0 4496 0.00 0.00 0.00 0.00 2 /sbin/auditd
04:25:21 PM 0 4498 0.00 0.00 0.00 0.00 0 /sbin/audispd
04:25:21 PM 0 4499 0.00 0.00 0.00 0.00 2 /usr/sbin/sedispatch
04:25:21 PM 32 4522 0.00 0.00 0.00 0.00 3 /sbin/rpcbind -w
04:25:21 PM 0 4523 0.00 0.00 0.00 0.00 1 /usr/lib/systemd/systemd-logind
04:25:21 PM 0 4524 2.26 0.60 0.00 2.86 0 /usr/libexec/accounts-daemon
04:25:21 PM 172 4527 0.00 0.00 0.00 0.00 3 /usr/libexec/rtkit-daemon
04:25:21 PM 0 4528 0.00 0.00 0.00 0.00 0 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon
04:25:21 PM 0 4529 0.00 0.00 0.00 0.00 0 /sbin/rngd -f
.......
数据来源就是 /proc/fd/stat,/proc/fd/cmdline,/proc/fd/status:
[root@localhost ~]# strace -e trace=open pidstat -l
......
open("/proc/1/stat", O_RDONLY) = 4
open("/proc/1/cmdline", O_RDONLY) = 4
open("/proc/1/status", O_RDONLY) = 4
open("/proc/2/stat", O_RDONLY) = 4
open("/proc/2/cmdline", O_RDONLY) = 4
open("/proc/2/status", O_RDONLY) = 4
open("/proc/3/stat", O_RDONLY) = 4
open("/proc/3/cmdline", O_RDONLY) = 4
open("/proc/3/status", O_RDONLY) = 4
open("/proc/5/stat", O_RDONLY) = 4
open("/proc/5/cmdline", O_RDONLY) = 4
open("/proc/5/status", O_RDONLY) = 4
open("/proc/7/stat", O_RDONLY) = 4
open("/proc/7/cmdline", O_RDONLY) = 4
open("/proc/7/status", O_RDONLY) = 4
open("/proc/8/stat", O_RDONLY) = 4
open("/proc/8/cmdline", O_RDONLY) = 4
open("/proc/8/status", O_RDONLY) = 4
......
2.4 pidstat -p
查看指定进程的信息统计:
[root@localhost ~]# pidstat -p `pidof top`
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
04:36:10 PM UID PID %usr %system %guest %CPU CPU Command
04:36:10 PM 0 4121 0.00 0.00 0.00 0.00 2 top
查看 pidstat 进程本身信息统计:
[root@localhost ~]# pidstat -p SELF
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
04:36:41 PM UID PID %usr %system %guest %CPU CPU Command
04:36:41 PM 0 5340 0.00 0.00 0.00 0.00 3 pidstat
查看所有进程信息统计:
[root@localhost ~]# pidstat -p ALL
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
04:37:28 PM UID PID %usr %system %guest %CPU CPU Command
04:37:28 PM 0 1 0.01 0.01 0.00 0.01 2 systemd
04:37:28 PM 0 2 0.00 0.00 0.00 0.00 0 kthreadd
04:37:28 PM 0 3 0.00 0.00 0.00 0.00 0 ksoftirqd/0
04:37:28 PM 0 5 0.00 0.00 0.00 0.00 0 kworker/0:0H
04:37:28 PM 0 7 0.00 0.00 0.00 0.00 0 migration/0
04:37:28 PM 0 8 0.00 0.00 0.00 0.00 0 rcu_bh
04:37:28 PM 0 9 0.00 0.07 0.00 0.07 1 rcu_sched
04:37:28 PM 0 10 0.00 0.00 0.00 0.00 0 lru-add-drain
04:37:28 PM 0 11 0.00 0.00 0.00 0.00 0 watchdog/0
04:37:28 PM 0 12 0.00 0.00 0.00 0.00 1 watchdog/1
04:37:28 PM 0 13 0.00 0.00 0.00 0.00 1 migration/1
04:37:28 PM 0 14 0.00 0.00 0.00 0.00 1 ksoftirqd/1
......
2.5 pidstat -r
-r Report page faults and memory utilization.
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
04:41:20 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
04:41:20 PM 0 1 0.23 0.00 193952 7080 0.09 systemd
04:41:20 PM 0 356 0.00 0.00 165512 6560 0.08 sshd
04:41:20 PM 0 360 0.00 0.00 165208 5936 0.08 sshd
04:41:20 PM 0 365 0.00 0.00 116784 3432 0.04 bash
04:41:20 PM 0 411 0.00 0.00 72092 2872 0.04 sftp-server
04:41:20 PM 0 482 0.00 0.00 165512 6544 0.08 sshd
04:41:20 PM 0 486 0.00 0.00 165208 5936 0.08 sshd
04:41:20 PM 0 490 0.00 0.00 116916 3660 0.05 bash
04:41:20 PM 0 531 0.00 0.00 72092 2876 0.04 sftp-server
04:41:20 PM 0 2254 0.09 0.00 68504 28784 0.36 systemd-journal
04:41:20 PM 0 2276 0.00 0.00 201084 4180 0.05 lvmetad
04:41:20 PM 0 2297 0.00 0.00 48476 5880 0.07 systemd-udevd
04:41:20 PM 0 4496 0.00 0.00 62044 1292 0.02 auditd
04:41:20 PM 0 4498 0.00 0.00 84552 888 0.01 audispd
04:41:20 PM 0 4499 0.00 0.00 55632 1664 0.02 sedispatch
04:41:20 PM 32 4522 0.00 0.00 73648 1376 0.02 rpcbind
04:41:20 PM 0 4523 0.05 0.00 26460 1840 0.02 systemd-logind
04:41:20 PM 0 4524 0.00 0.00 396624 4604 0.06 accounts-daemon
......
minflt/s
Total number of minor faults the task has made per second, those which have not required loading a memory page from disk.
majflt/s
Total number of major faults the task has made per second, those which have required loading a memory page from disk.
VSZ
Virtual Size: The virtual memory usage of entire task in kilobytes.
RSS
Resident Set Size: The non-swapped physical memory used by the task in kilobytes.
%MEM
The tasks's currently used share of available physical memory.
2.6 pidstat -s
-s Report stack utilization.
显示任务堆栈的使用情况:
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
05:06:00 PM UID PID StkSize StkRef Command
05:06:00 PM 0 1 132 48 systemd
05:06:00 PM 0 356 132 40 sshd
05:06:00 PM 0 360 132 40 sshd
05:06:00 PM 0 365 132 28 bash
05:06:00 PM 0 411 132 32 sftp-server
05:06:00 PM 0 482 132 44 sshd
05:06:00 PM 0 486 132 40 sshd
05:06:00 PM 0 490 132 32 bash
05:06:00 PM 0 531 132 36 sftp-server
05:06:00 PM 0 2254 132 44 systemd-journal
05:06:00 PM 0 2276 132 24 lvmetad
05:06:00 PM 0 2297 132 48 systemd-udevd
05:06:00 PM 0 4496 132 44 auditd
05:06:00 PM 0 4498 132 12 audispd
05:06:00 PM 0 4499 132 20 sedispatch
05:06:00 PM 32 4522 132 20 rpcbind
......
StkSize
The amount of memory in kilobytes reserved for the task as stack, but not necessarily used.
(任务堆栈内存量的总大小,KB 为单位,但不一定使用全部)
StkRef
The amount of memory in kilobytes used as stack, referenced by the task.
(任务引用堆栈的内存量,KB 为单位(任务已经使用的堆栈内存大小))
2.7 pidstat -w
-w Report task switching activity
Linux 3.10.0-957.el7.x86\_64 (localhost.localdomain) 11/24/2022 \_x86\_64\_ (4 CPU)
05:06:29 PM UID PID cswch/s nvcswch/s Command
05:06:29 PM 0 1 0.49 0.01 systemd
05:06:29 PM 0 2 0.00 0.00 kthreadd
05:06:29 PM 0 3 0.27 0.00 ksoftirqd/0
05:06:29 PM 0 5 0.00 0.00 kworker/0:0H
05:06:29 PM 0 7 0.19 0.00 migration/0
05:06:29 PM 0 8 0.00 0.00 rcu_bh
05:06:29 PM 0 9 37.92 0.00 rcu_sched
05:06:29 PM 0 10 0.00 0.00 lru-add-drain
05:06:29 PM 0 11 0.25 0.00 watchdog/0
05:06:29 PM 0 12 0.25 0.00 watchdog/1
05:06:29 PM 0 13 0.18 0.00 migration/1
05:06:29 PM 0 14 0.06 0.00 ksoftirqd/1
05:06:29 PM 0 16 0.00 0.00 kworker/1:0H
05:06:29 PM 0 17 0.25 0.00 watchdog/2
05:06:29 PM 0 18 0.17 0.00 migration/2
05:06:29 PM 0 19 0.16 0.00 ksoftirqd/2
05:06:29 PM 0 21 0.00 0.00 kworker/2:0H
05:06:29 PM 0 22 0.25 0.00 watchdog/3
05:06:29 PM 0 23 0.18 0.00 migration/3
......
cswch/s
Total number of voluntary context switches the task made per second. A voluntary context switch occurs when a task blocks because it requires a resource that is unavail‐
able.
nvcswch/s
Total number of non voluntary context switches the task made per second. A involuntary context switch takes place when a task executes for the duration of its time slice
and then is forced to relinquish the processor.
自愿上下文切换:是指进程无法获取所需资源,即任务处于I/O阻塞态时,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。任务访问该资源,但此时资源没有,处于阻塞态等待资源的到来,在等待期间自愿进行上下文切换。
非自愿上下文切换:则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
三、pidstat 数据来源
由于是统计每个任务使用资源的使用情况,其实就是获取 /proc/fd/ 下面的内容:
strace -e trace=open -o pidstat.txt pidstat
......
open("/proc/uptime", O_RDONLY) = 3
open("/proc/stat", O_RDONLY) = 3
open("/proc/1/stat", O_RDONLY) = 4
open("/proc/1/status", O_RDONLY) = 4
open("/proc/2/stat", O_RDONLY) = 4
open("/proc/2/status", O_RDONLY) = 4
open("/proc/3/stat", O_RDONLY) = 4
open("/proc/3/status", O_RDONLY) = 4
open("/proc/5/stat", O_RDONLY) = 4
open("/proc/5/status", O_RDONLY) = 4
open("/proc/7/stat", O_RDONLY) = 4
open("/proc/7/status", O_RDONLY) = 4
open("/proc/8/stat", O_RDONLY) = 4
open("/proc/8/status", O_RDONLY) = 4
open("/proc/9/stat", O_RDONLY) = 4
open("/proc/9/status", O_RDONLY) = 4
open("/proc/10/stat", O_RDONLY) = 4
open("/proc/10/status", O_RDONLY) = 4
open("/proc/11/stat", O_RDONLY) = 4
open("/proc/11/status", O_RDONLY) = 4
open("/proc/12/stat", O_RDONLY) = 4
open("/proc/12/status", O_RDONLY) = 4
......
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
存中…(img-nMnY2PUv-1714264351689)]
[外链图片转存中…(img-y4OtBlUS-1714264351690)]
[外链图片转存中…(img-ajIhAn0K-1714264351691)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新