您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

如何在批处理模式下运行 top 命令

时间:2019-10-23 10:21:12  来源:  作者:
如何在批处理模式下运行 top 命令

 

可能已经知道 top 命令的绝大部分操作,除了很少的几个操作,如果我没错的话,批处理模式就是其中之一。

-- Magesh Maruthamuthu(作者)

top 命令 是每个人都在使用的用于 监控 linux 系统性能 的最好的命令。你可能已经知道 top 命令的绝大部分操作,除了很少的几个操作,如果我没错的话,批处理模式就是其中之一。

大部分的脚本编写者和开发人员都知道这个,因为这个操作主要就是用来编写脚本。

如果你不了解这个,不用担心,我们将在这里介绍它。

什么是 top 命令的批处理模式

批处理模式允许你将 top 命令的输出发送至其他程序或者文件中。

在这个模式中,top 命令将不会接收输入并且持续运行,直到迭代次数达到你用 -n 选项指定的次数为止。

如果你想解决 Linux 服务器上的任何性能问题,你需要正确的 理解 top 命令的输出 。

1) 如何在批处理模式下运行 top 命令

默认地,top 命令按照 CPU 的使用率来排序输出结果,所以当你在批处理模式中运行以下命令时,它会执行同样的操作并打印前 35 行:

# top -bc | head -35
top - 06:41:14 up 8 days, 20:24, 1 user, load average: 0.87, 0.77, 0.81
Tasks: 139 total, 1 running, 136 sleeping, 0 stopped, 2 zombie
%Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880940 total, 1595932 free, 886736 used, 1398272 buff/cache
KiB Swap: 1048572 total, 514640 free, 533932 used. 2648472 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 1 root 20 0 191144 2800 1596 S 0.0 0.1 5:43.63 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.32 [kthreadd]
 3 root 20 0 0 0 0 S 0.0 0.0 0:28.10 [ksoftirqd/0]
 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
 7 root rt 0 0 0 0 S 0.0 0.0 0:33.96 [migration/0]
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
 9 root 20 0 0 0 0 S 0.0 0.0 63:05.12 [rcu_sched]
 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [lru-add-drain]
 11 root rt 0 0 0 0 S 0.0 0.0 0:08.79 [watchdog/0]
 12 root rt 0 0 0 0 S 0.0 0.0 0:08.82 [watchdog/1]
 13 root rt 0 0 0 0 S 0.0 0.0 0:44.27 [migration/1]
 14 root 20 0 0 0 0 S 0.0 0.0 1:22.45 [ksoftirqd/1]
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/1:0H]
 18 root 20 0 0 0 0 S 0.0 0.0 0:00.01 [kdevtmpfs]
 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns]
 20 root 20 0 0 0 0 S 0.0 0.0 0:01.35 [khungtaskd]
 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.02 [writeback]
 22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kintegrityd]
 23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bIOSet]
 24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kblockd]
 25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [md]
 26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [edac-poller]
 33 root 20 0 0 0 0 S 0.0 0.0 1:19.07 [kswapd0]
 34 root 25 5 0 0 0 S 0.0 0.0 0:00.00 [ksmd]
 35 root 39 19 0 0 0 S 0.0 0.0 0:12.80 [khugepaged]
 36 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [crypto]
 44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kthrotld]
 46 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kmpath_rdacd]

2) 如何在批处理模式下运行 top 命令并按内存使用率排序结果

在批处理模式中运行以下命令按内存使用率对结果进行排序:

# top -bc -o +%MEM | head -n 20
top - 06:42:00 up 8 days, 20:25, 1 user, load average: 0.66, 0.74, 0.80
Tasks: 146 total, 1 running, 145 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880940 total, 1422044 free, 1059176 used, 1399720 buff/cache
KiB Swap: 1048572 total, 514640 free, 533932 used. 2475984 avail Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 18105 MySQL 20 0 1453900 156096 8816 S 0.0 4.0 2:12.98 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 1841 root 20 0 228980 107036 5360 S 0.0 2.8 0:05.56 /usr/local/cpanel/3rdparty/perl/528/bin/perl -T -w /usr/local/cpanel/3rdparty/bin/spamd --max-children=3 --max-spare=1 --allowed-ips=127.0.0.+
 4301 root 20 0 230208 104608 1816 S 0.0 2.7 0:03.77 spamd child
 8139 nobody 20 0 257000 27108 3408 S 0.0 0.7 0:00.04 /usr/sbin/httpd -k start
 7961 nobody 20 0 256988 26912 3160 S 0.0 0.7 0:00.05 /usr/sbin/httpd -k start
 8190 nobody 20 0 256976 26812 3140 S 0.0 0.7 0:00.05 /usr/sbin/httpd -k start
 8353 nobody 20 0 256976 26812 3144 S 0.0 0.7 0:00.04 /usr/sbin/httpd -k start
 8629 nobody 20 0 256856 26736 3108 S 0.0 0.7 0:00.02 /usr/sbin/httpd -k start
 8636 nobody 20 0 256856 26712 3100 S 0.0 0.7 0:00.03 /usr/sbin/httpd -k start
 8611 nobody 20 0 256844 25764 2228 S 0.0 0.7 0:00.01 /usr/sbin/httpd -k start
 8451 nobody 20 0 256844 25760 2220 S 0.0 0.7 0:00.04 /usr/sbin/httpd -k start
 8610 nobody 20 0 256844 25748 2224 S 0.0 0.7 0:00.01 /usr/sbin/httpd -k start
 8632 nobody 20 0 256844 25744 2216 S 0.0 0.7 0:00.03 /usr/sbin/httpd -k start

上面命令的详细信息:

  • -b:批处理模式选项
  • -c:打印运行中的进程的绝对路径
  • -o:指定进行排序的字段
  • head:输出文件的第一部分
  • -n:打印前 n 行

3) 如何在批处理模式下运行 top 命令并按照指定的用户进程对结果进行排序

如果你想要按照指定用户进程对结果进行排序请运行以下命令:

# top -bc -u mysql | head -n 10
top - 06:44:58 up 8 days, 20:27, 1 user, load average: 0.99, 0.87, 0.84
Tasks: 140 total, 1 running, 137 sleeping, 0 stopped, 2 zombie
%Cpu(s): 13.3 us, 3.3 sy, 0.0 ni, 83.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880940 total, 1589832 free, 885648 used, 1405460 buff/cache
KiB Swap: 1048572 total, 514640 free, 533932 used. 2649412 avail Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 18105 mysql 20 0 1453900 156888 8816 S 0.0 4.0 2:16.42 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

4) 如何在批处理模式下运行 top 命令并按照处理时间进行排序

在批处理模式中使用以下 top 命令按照处理时间对结果进行排序。这展示了任务从启动以来已使用的总 CPU 时间。

但是如果你想要检查一个进程在 Linux 上运行了多长时间请看接下来的文章:

  • 检查 Linux 中进程运行时间的五种方法
# top -bc -o TIME+ | head -n 20
top - 06:45:56 up 8 days, 20:28, 1 user, load average: 0.56, 0.77, 0.81
Tasks: 148 total, 1 running, 146 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.0 us, 3.1 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880940 total, 1378664 free, 1094876 used, 1407400 buff/cache
KiB Swap: 1048572 total, 514640 free, 533932 used. 2440332 avail Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 9 root 20 0 0 0 0 S 0.0 0.0 63:05.70 [rcu_sched]
 272 root 20 0 0 0 0 S 0.0 0.0 16:12.13 [xfsaild/vda1]
 3882 root 20 0 229832 6212 1220 S 0.0 0.2 9:00.84 /usr/sbin/httpd -k start
 1 root 20 0 191144 2800 1596 S 0.0 0.1 5:43.75 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
 3761 root 20 0 68784 9820 2048 S 0.0 0.3 5:09.67 tailwatchd
 3529 root 20 0 404380 3472 2604 S 0.0 0.1 3:24.98 /usr/sbin/rsyslogd -n
 3520 root 20 0 574208 572 164 S 0.0 0.0 3:07.74 /usr/bin/Python2 -Es /usr/sbin/tuned -l -P
 444 dbus 20 0 58444 1144 612 S 0.0 0.0 2:23.90 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
 18105 mysql 20 0 1453900 157152 8816 S 0.0 4.0 2:17.29 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 249 root 0 -20 0 0 0 S 0.0 0.0 1:28.83 [kworker/0:1H]
 14 root 20 0 0 0 0 S 0.0 0.0 1:22.46 [ksoftirqd/1]
 33 root 20 0 0 0 0 S 0.0 0.0 1:19.07 [kswapd0]
 342 root 20 0 39472 2940 2752 S 0.0 0.1 1:18.17 /usr/lib/systemd/systemd-journald

5) 如何在批处理模式下运行 top 命令并将结果保存到文件中

如果出于解决问题的目的,你想要和别人分享 top 命令的输出,请使用以下命令重定向输出到文件中:

# top -bc | head -35 > top-report.txt
# cat top-report.txt
top - 06:47:11 up 8 days, 20:30, 1 user, load average: 0.67, 0.77, 0.81
Tasks: 133 total, 4 running, 129 sleeping, 0 stopped, 0 zombie
%Cpu(s): 59.4 us, 12.5 sy, 0.0 ni, 28.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880940 total, 1596268 free, 843284 used, 1441388 buff/cache
KiB Swap: 1048572 total, 514640 free, 533932 used. 2659084 avail Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 9686 daygeekc 20 0 406132 62184 43448 R 94.1 1.6 0:00.34 /opt/cpanel/ea-php56/root/usr/bin/php-cgi
 9689 nobody 20 0 256588 24428 1184 S 5.9 0.6 0:00.01 /usr/sbin/httpd -k start
 1 root 20 0 191144 2800 1596 S 0.0 0.1 5:43.79 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.32 [kthreadd]
 3 root 20 0 0 0 0 S 0.0 0.0 0:28.11 [ksoftirqd/0]
 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
 7 root rt 0 0 0 0 S 0.0 0.0 0:33.96 [migration/0]
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
 9 root 20 0 0 0 0 R 0.0 0.0 63:05.82 [rcu_sched]
 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [lru-add-drain]
 11 root rt 0 0 0 0 S 0.0 0.0 0:08.79 [watchdog/0]
 12 root rt 0 0 0 0 S 0.0 0.0 0:08.82 [watchdog/1]
 13 root rt 0 0 0 0 S 0.0 0.0 0:44.28 [migration/1]
 14 root 20 0 0 0 0 S 0.0 0.0 1:22.46 [ksoftirqd/1]
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/1:0H]
 18 root 20 0 0 0 0 S 0.0 0.0 0:00.01 [kdevtmpfs]
 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns]
 20 root 20 0 0 0 0 S 0.0 0.0 0:01.35 [khungtaskd]
 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.02 [writeback]
 22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kintegrityd]
 23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
 24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kblockd]
 25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [md]
 26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [edac-poller]
 33 root 20 0 0 0 0 S 0.0 0.0 1:19.07 [kswapd0]
 34 root 25 5 0 0 0 S 0.0 0.0 0:00.00 [ksmd]
 35 root 39 19 0 0 0 S 0.0 0.0 0:12.80 [khugepaged]
 36 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [crypto]

如何按照指定字段对结果进行排序

在 top 命令的最新版本中, 按下 f 键进入字段管理界面。

要使用新字段进行排序, 请使用 up/down 箭头选择正确的选项,然后再按下 s 键进行排序。最后按 q 键退出此窗口。

Fields Management for window 1:Def, whose current sort field is %CPU
 Navigate with Up/Dn, Right selects for move then or Left commits,
 'd' or toggles display, 's' sets sort. Use 'q' or to end!
 PID = Process Id nsUTS = UTS namespace Inode
 USER = Effective User Name LXC = LXC container name
 PR = Priority RSan = RES Anonymous (KiB)
 NI = Nice Value RSfd = RES File-based (KiB)
 VIRT = Virtual Image (KiB) RSlk = RES Locked (KiB)
 RES = Resident Size (KiB) RSsh = RES Shared (KiB)
 SHR = Shared Memory (KiB) CGNAME = Control Group name
 S = Process Status NU = Last Used NUMA node
 %CPU = CPU Usage
 %MEM = Memory Usage (RES)
 TIME+ = CPU Time, hundredths
 COMMAND = Command Name/Line
 PPID = Parent Process pid
 UID = Effective User Id
 RUID = Real User Id
 RUSER = Real User Name
 SUID = Saved User Id
 SUSER = Saved User Name
 GID = Group Id
 GROUP = Group Name
 PGRP = Process Group Id
 TTY = Controlling Tty
 TPGID = Tty Process Grp Id
 SID = Session Id
 nTH = Number of Threads
 P = Last Used Cpu (SMP)
 TIME = CPU Time
 SWAP = SwApped Size (KiB)
 CODE = Code Size (KiB)
 DATA = Data+Stack (KiB)
 nMaj = Major Page Faults
 nMin = Minor Page Faults
 nDRT = Dirty Pages Count
 WCHAN = Sleeping in Function
 Flags = Task Flags
 CGROUPS = Control Groups
 SUPGIDS = Supp Groups IDs
 SUPGRPS = Supp Groups Names
 TGID = Thread Group Id
 OOMa = OOMEM Adjustment
 OOMs = OOMEM Score current
 ENVIRON = Environment vars
 vMj = Major Faults delta
 vMn = Minor Faults delta
 USED = Res+Swap Size (KiB)
 nsIPC = IPC namespace Inode
 nsMNT = MNT namespace Inode
 nsNET = NET namespace Inode
 nsPID = PID namespace Inode
 nsUSER = USER namespace Inode

对 top 命令的旧版本,请按 shift+f 或 shift+o 键进入字段管理界面进行排序。

要使用新字段进行排序,请选择相应的排序字段字母, 然后按下回车键排序。

Current Sort Field: N for window 1:Def
 Select sort field via field letter, type any other key to return
 a: PID = Process Id
 b: PPID = Parent Process Pid
 c: RUSER = Real user name
 d: UID = User Id
 e: USER = User Name
 f: GROUP = Group Name
 g: TTY = Controlling Tty
 h: PR = Priority
 i: NI = Nice value
 j: P = Last used cpu (SMP)
 k: %CPU = CPU usage
 l: TIME = CPU Time
 m: TIME+ = CPU Time, hundredths
* N: %MEM = Memory usage (RES)
 o: VIRT = Virtual Image (kb)
 p: SWAP = Swapped size (kb)
 q: RES = Resident size (kb)
 r: CODE = Code size (kb)
 s: DATA = Data+Stack size (kb)
 t: SHR = Shared Mem size (kb)
 u: nFLT = Page Fault count
 v: nDRT = Dirty Pages count
 w: S = Process Status
 x: COMMAND = Command name/line
 y: WCHAN = Sleeping in Function
 z: Flags = Task Flags
 Note1:
 If a selected sort field can't be
 shown due to screen width or your
 field order, the '<' and '>' keys
 will be unavailable until a field
 within viewable range is chosen.
 Note2:
 Field sorting uses internal values,
 not those in column display. Thus,
 the TTY & WCHAN fields will violate
 strict ASCII collating sequence.
 (shame on you if WCHAN is chosen)

via: https://www.2daygeek.com/linux-run-execute-top-command-in-batch-mode/

作者: Magesh Maruthamuthu 选题: lujun9972 译者: way-ww 校对: 校对者ID

本文由 LCTT 原创编译, Linux中国 荣誉推出



Tags:top 命令   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
可能已经知道 top 命令的绝大部分操作,除了很少的几个操作,如果我没错的话,批处理模式就是其中之一。-- Magesh Maruthamuthu(作者)top 命令 是每个人都在使用的用于 监控 Linux...【详细内容】
2019-10-23  Tags: top 命令  点击:(4422)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条