Mac使用Top命令统计多个进程的CPU和内存

Mac和Linux的top还是有些区别的,在使用的时候需要注意,我们从帮助提示可以看出,比如:

Linux电脑:

$ top -h
	top: procps version 3.2.8
usage:	top -hv | -abcHimMsS -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

Mac电脑:

top usage: top
		[-a | -d | -e | -c <mode>]
		[-F | -f]
		[-h]
		[-i <interval>]
		[-l <samples>]
		[-ncols <columns>]
		[-o <key>] [-O <secondaryKey>]
			keys: pid (default), command, cpu, cpu_me, cpu_others, csw,
				time, threads, ports, mregion, mem, rprvt, purg, vsize, vprvt,
				kprvt, kshrd, pgrp, ppid, state, uid, wq, faults, cow, user,
				msgsent, msgrecv, sysbsd, sysmach, pageins, boosts, instrs, cycles
		[-R | -r]
		[-S]
		[-s <delay>]
		[-n <nprocs>]
		[-stats <key(s)>]
		[-pid <processid>]
		[-user <username>]
		[-U <username>]
		[-u]

回到正题,在最近的工作中,遇到了一个问题:需要统计一个Mac桌面应用的CPU和内存资源,但是这个应用里面由于技术实现的原因,有很多个进程的资源需要统计,然后mac的内存计算方法和常规的有点点不一样,详情见:Link,然后python的psutil模块得到的结果也不是我们想要的,Mac我们其实可以使用top的终端命令来统计,具体的方法如下:

假设我们有2个进程,对应的pid分别是:21825和21978,我们想执行3次,每次都同时输出这两个进程的信息,命令如下:

top -l 3 -o mem -pid 21825 -pid 21978

Ps:linux下,多个进程通过【-p 21825,21978】这种指定就行了。

Mac上运行命令后输出结果如下:

Processes: 432 total, 2 running, 430 sleeping, 2619 threads
2021/12/21 20:56:12
Load Avg: 3.62, 2.90, 3.04
CPU usage: 4.41% user, 11.2% sys, 84.55% idle
SharedLibs: 259M resident, 42M data, 23M linkedit.
MemRegions: 171676 total, 1528M resident, 70M private, 623M shared.
PhysMem: 8160M used (2370M wired), 31M unused.
VM: 4944G vsize, 2318M framework vsize, 2465278(0) swapins, 3037599(0) swapouts.
Networks: packets: 3808354/2388M in, 3495950/644M out.
Disks: 2872677/62G read, 1604147/37G written.

PID    COMMAND          %CPU TIME     #TH #WQ #PORTS MEM  PURG  CMPRS PGRP  PPID STATE    BOOSTS   %CPU_ME %CPU_OTHRS UID FAULTS  COW  MSGSENT MSGRECV SYSBSD  SYSMACH  CSW     PAGEINS IDLEW  POWER INSTRS CYCLES USER     #MREGS RPRVT VPRVT VSIZE KPRVT KSHRD
21825  Infoflow         0.0  10:17.78 35  8   1619   461M 1928K 279M  21825 1    sleeping *0[3326] 0.00000 0.00000    502 7025422 3929 4716403 700533  3879927 10722990 5175647 9266    221434 0.0   0      0      rongsong N/A    N/A   N/A   N/A   N/A   N/A
21978  com.apple.WebKit 0.0  00:01.99 3   1   95     13M  0B    7372K 21978 1    sleeping  0[1550] 0.00000 0.00000    502 26970   327  24381   12486   26370   49141    26067   173     875    0.0   0      0      rongsong N/A    N/A   N/A   N/A   N/A   N/A
Processes: 432 total, 2 running, 430 sleeping, 2622 threads
2021/12/21 20:56:13
Load Avg: 3.41, 2.87, 3.03
CPU usage: 6.13% user, 6.76% sys, 87.9% idle
SharedLibs: 259M resident, 42M data, 23M linkedit.
MemRegions: 171676 total, 1528M resident, 70M private, 623M shared.
PhysMem: 8135M used (2388M wired), 55M unused.
VM: 4944G vsize, 2318M framework vsize, 2465342(64) swapins, 3037599(0) swapouts.
Networks: packets: 3808510/2388M in, 3496205/644M out.
Disks: 2872683/62G read, 1604149/37G written.

PID    COMMAND          %CPU TIME     #TH #WQ #PORTS MEM   PURG   CMPRS PGRP  PPID STATE    BOOSTS    %CPU_ME %CPU_OTHRS UID FAULTS   COW  MSGSENT  MSGRECV SYSBSD   SYSMACH   CSW      PAGEINS IDLEW   POWER INSTRS   CYCLES   USER     #MREGS RPRVT VPRVT VSIZE KPRVT KSHRD
21825  Infoflow         2.3  10:17.81 35  8   1619   461M- 2004K+ 279M- 21825 1    sleeping *0[3327+] 0.08172 0.72198    502 7025483+ 3929 4716814+ 700645+ 3880138+ 10724443+ 5176152+ 9266    221461+ 3.2   17923740 45825430 rongsong N/A    N/A   N/A   N/A   N/A   N/A
21978  com.apple.WebKit 0.0  00:01.99 3   1   95     13M   0B     7372K 21978 1    sleeping  0[1550]  0.00000 0.00000    502 26970    327  24383+   12487+  26370    49150+    26068+   173     875     0.0   44148    158501   rongsong N/A    N/A   N/A   N/A   N/A   N/A
Processes: 432 total, 3 running, 429 sleeping, 2618 threads
2021/12/21 20:56:14
Load Avg: 3.41, 2.87, 3.03
CPU usage: 2.47% user, 3.29% sys, 94.23% idle
SharedLibs: 259M resident, 42M data, 23M linkedit.
MemRegions: 171676 total, 1528M resident, 70M private, 623M shared.
PhysMem: 8135M used (2388M wired), 55M unused.
VM: 4944G vsize, 2318M framework vsize, 2465342(0) swapins, 3037599(0) swapouts.
Networks: packets: 3808557/2388M in, 3496341/644M out.
Disks: 2872683/62G read, 1604369/37G written.

PID    COMMAND          %CPU TIME     #TH #WQ #PORTS MEM   PURG   CMPRS PGRP  PPID STATE    BOOSTS    %CPU_ME %CPU_OTHRS UID FAULTS   COW  MSGSENT  MSGRECV SYSBSD   SYSMACH   CSW      PAGEINS IDLEW   POWER INSTRS   CYCLES   USER     #MREGS RPRVT VPRVT VSIZE KPRVT KSHRD
21825  Infoflow         0.3  10:17.82 35  8   1614-  461M  1928K- 279M  21825 1    sleeping *0[3328+] 0.02540 0.03795    502 7025487+ 3929 4716863+ 700654+ 3880218+ 10724609+ 5176243+ 9266    221495+ 1.9   2064739  6240688  rongsong N/A    N/A   N/A   N/A   N/A   N/A
21978  com.apple.WebKit 0.0  00:01.99 3   1   95     13M   0B     7372K 21978 1    sleeping  0[1550]  0.00000 0.00000    502 26970    327  24383    12487   26370    49150     26068    173     875     0.0   0        0

有了这些信息,就可以容易的提取出我们想要的信息了,因为每次输出的信息基本是固定的(不过这里需要考虑进程中途退出的情况,比如21978进程中途可能没有了,应该就最后的结果输出行数有区别

Ps:比如下面这种场景,同样一条命令,开始时有3个进程,后面只有2个进程,其实前面的行数都是固定的,只是后面的详情输出不一样而已。这个其实也很好处理,比如可以以Processes来分组。(第一个Processes出现的位置到第二个Processes出现的位置为第一组数据,以此类推)

因为每一次采样的输出是以这种格式开头的:Processes: 431 total, 2 running, 429 sleeping, 3078 threads。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rs勿忘初心

您的鼓励将是我的最大创动原动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值