批处理模式下运行 top 命令的方法
top命令是每个人都在使用的用于监控Linux系统性能的最好的命令。你可能已经知道top命令的绝大部分操作,除了很少的几个操作,如果我没错的话,批处理模式就是其中之一。
大部分的脚本编写者和开发人员都知道这个,因为这个操作主要就是用来编写脚本。
如果你不了解这个,不用担心,我们将在这里介绍它。
什么是top命令的批处理模式
批处理模式允许你将top命令的输出发送至其他程序或者文件中。
在这个模式中,top命令将不会接收输入并且持续运行,直到迭代次数达到你用-n选项指定的次数为止。
如果你想解决Linux服务器上的任何性能问题,你需要正确的理解top命令的输出。
1)如何在批处理模式下运行top命令
默认地,top命令按照CPU的使用率来排序输出结果,所以当你在批处理模式中运行以下命令时,它会执行同样的操作并打印前35行:
#top-bc|head-35 top-06:41:14up8days,20:24,1user,loadaverage:0.87,0.77,0.81 Tasks:139total,1running,136sleeping,0stopped,2zombie %Cpu(s):0.0us,3.2sy,0.0ni,96.8id,0.0wa,0.0hi,0.0si,0.0st KiBMem:3880940total,1595932free,886736used,1398272buff/cache KiBSwap:1048572total,514640free,533932used.2648472availMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 1root20019114428001596S0.00.15:43.63/usr/lib/systemd/systemd--switched-root--system--deserialize22 2root200000S0.00.00:00.32[kthreadd] 3root200000S0.00.00:28.10[ksoftirqd/0] 5root0-20000S0.00.00:00.00[kworker/0:0H] 7rootrt0000S0.00.00:33.96[migration/0] 8root200000S0.00.00:00.00[rcu_bh] 9root200000S0.00.063:05.12[rcu_sched] 10root0-20000S0.00.00:00.00[lru-add-drain] 11rootrt0000S0.00.00:08.79[watchdog/0] 12rootrt0000S0.00.00:08.82[watchdog/1] 13rootrt0000S0.00.00:44.27[migration/1] 14root200000S0.00.01:22.45[ksoftirqd/1] 16root0-20000S0.00.00:00.00[kworker/1:0H] 18root200000S0.00.00:00.01[kdevtmpfs] 19root0-20000S0.00.00:00.00[netns] 20root200000S0.00.00:01.35[khungtaskd] 21root0-20000S0.00.00:00.02[writeback] 22root0-20000S0.00.00:00.00[kintegrityd] 23root0-20000S0.00.00:00.00[bioset] 24root0-20000S0.00.00:00.00[kblockd] 25root0-20000S0.00.00:00.00[md] 26root0-20000S0.00.00:00.00[edac-poller] 33root200000S0.00.01:19.07[kswapd0] 34root255000S0.00.00:00.00[ksmd] 35root3919000S0.00.00:12.80[khugepaged] 36root0-20000S0.00.00:00.00[crypto] 44root0-20000S0.00.00:00.00[kthrotld] 46root0-20000S0.00.00:00.00[kmpath_rdacd]
2)如何在批处理模式下运行top命令并按内存使用率排序结果
在批处理模式中运行以下命令按内存使用率对结果进行排序:
#top-bc-o+%MEM|head-n20 top-06:42:00up8days,20:25,1user,loadaverage:0.66,0.74,0.80 Tasks:146total,1running,145sleeping,0stopped,0zombie %Cpu(s):0.0us,0.0sy,0.0ni,100.0id,0.0wa,0.0hi,0.0si,0.0st KiBMem:3880940total,1422044free,1059176used,1399720buff/cache KiBSwap:1048572total,514640free,533932used.2475984availMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 18105mysql20014539001560968816S0.04.02:12.98/usr/sbin/mysqld--daemonize--pid-file=/var/run/mysqld/mysqld.pid 1841root2002289801070365360S0.02.80: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.+ 4301root2002302081046081816S0.02.70:03.77spamdchild 8139nobody200257000271083408S0.00.70:00.04/usr/sbin/httpd-kstart 7961nobody200256988269123160S0.00.70:00.05/usr/sbin/httpd-kstart 8190nobody200256976268123140S0.00.70:00.05/usr/sbin/httpd-kstart 8353nobody200256976268123144S0.00.70:00.04/usr/sbin/httpd-kstart 8629nobody200256856267363108S0.00.70:00.02/usr/sbin/httpd-kstart 8636nobody200256856267123100S0.00.70:00.03/usr/sbin/httpd-kstart 8611nobody200256844257642228S0.00.70:00.01/usr/sbin/httpd-kstart 8451nobody200256844257602220S0.00.70:00.04/usr/sbin/httpd-kstart 8610nobody200256844257482224S0.00.70:00.01/usr/sbin/httpd-kstart 8632nobody200256844257442216S0.00.70:00.03/usr/sbin/httpd-kstart
上面命令的详细信息:
-b:批处理模式选项
-c:打印运行中的进程的绝对路径
-o:指定进行排序的字段
head:输出文件的第一部分
-n:打印前n行
3)如何在批处理模式下运行top命令并按照指定的用户进程对结果进行排序
如果你想要按照指定用户进程对结果进行排序请运行以下命令:
#top-bc-umysql|head-n10 top-06:44:58up8days,20:27,1user,loadaverage:0.99,0.87,0.84 Tasks:140total,1running,137sleeping,0stopped,2zombie %Cpu(s):13.3us,3.3sy,0.0ni,83.3id,0.0wa,0.0hi,0.0si,0.0st KiBMem:3880940total,1589832free,885648used,1405460buff/cache KiBSwap:1048572total,514640free,533932used.2649412availMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 18105mysql20014539001568888816S0.04.02:16.42/usr/sbin/mysqld--daemonize--pid-file=/var/run/mysqld/mysqld.pid
4)如何在批处理模式下运行top命令并按照处理时间进行排序
在批处理模式中使用以下top命令按照处理时间对结果进行排序。这展示了任务从启动以来已使用的总CPU时间。
但是如果你想要检查一个进程在Linux上运行了多长时间请看接下来的文章:
检查Linux中进程运行时间的五种方法
#top-bc-oTIME+|head-n20 top-06:45:56up8days,20:28,1user,loadaverage:0.56,0.77,0.81 Tasks:148total,1running,146sleeping,0stopped,1zombie %Cpu(s):0.0us,3.1sy,0.0ni,96.9id,0.0wa,0.0hi,0.0si,0.0st KiBMem:3880940total,1378664free,1094876used,1407400buff/cache KiBSwap:1048572total,514640free,533932used.2440332availMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 9root200000S0.00.063:05.70[rcu_sched] 272root200000S0.00.016:12.13[xfsaild/vda1] 3882root20022983262121220S0.00.29:00.84/usr/sbin/httpd-kstart 1root20019114428001596S0.00.15:43.75/usr/lib/systemd/systemd--switched-root--system--deserialize22 3761root2006878498202048S0.00.35:09.67tailwatchd 3529root20040438034722604S0.00.13:24.98/usr/sbin/rsyslogd-n 3520root200574208572164S0.00.03:07.74/usr/bin/python2-Es/usr/sbin/tuned-l-P 444dbus200584441144612S0.00.02:23.90/usr/bin/dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation 18105mysql20014539001571528816S0.04.02:17.29/usr/sbin/mysqld--daemonize--pid-file=/var/run/mysqld/mysqld.pid 249root0-20000S0.00.01:28.83[kworker/0:1H] 14root200000S0.00.01:22.46[ksoftirqd/1] 33root200000S0.00.01:19.07[kswapd0] 342root2003947229402752S0.00.11:18.17/usr/lib/systemd/systemd-journald
5)如何在批处理模式下运行top命令并将结果保存到文件中
如果出于解决问题的目的,你想要和别人分享top命令的输出,请使用以下命令重定向输出到文件中:
#top-bc|head-35>top-report.txt #cattop-report.txt top-06:47:11up8days,20:30,1user,loadaverage:0.67,0.77,0.81 Tasks:133total,4running,129sleeping,0stopped,0zombie %Cpu(s):59.4us,12.5sy,0.0ni,28.1id,0.0wa,0.0hi,0.0si,0.0st KiBMem:3880940total,1596268free,843284used,1441388buff/cache KiBSwap:1048572total,514640free,533932used.2659084availMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 9686daygeekc2004061326218443448R94.11.60:00.34/opt/cpanel/ea-php56/root/usr/bin/php-cgi 9689nobody200256588244281184S5.90.60:00.01/usr/sbin/httpd-kstart 1root20019114428001596S0.00.15:43.79/usr/lib/systemd/systemd--switched-root--system--deserialize22 2root200000S0.00.00:00.32[kthreadd] 3root200000S0.00.00:28.11[ksoftirqd/0] 5root0-20000S0.00.00:00.00[kworker/0:0H] 7rootrt0000S0.00.00:33.96[migration/0] 8root200000S0.00.00:00.00[rcu_bh] 9root200000R0.00.063:05.82[rcu_sched] 10root0-20000S0.00.00:00.00[lru-add-drain] 11rootrt0000S0.00.00:08.79[watchdog/0] 12rootrt0000S0.00.00:08.82[watchdog/1] 13rootrt0000S0.00.00:44.28[migration/1] 14root200000S0.00.01:22.46[ksoftirqd/1] 16root0-20000S0.00.00:00.00[kworker/1:0H] 18root200000S0.00.00:00.01[kdevtmpfs] 19root0-20000S0.00.00:00.00[netns] 20root200000S0.00.00:01.35[khungtaskd] 21root0-20000S0.00.00:00.02[writeback] 22root0-20000S0.00.00:00.00[kintegrityd] 23root0-20000S0.00.00:00.00[bioset] 24root0-20000S0.00.00:00.00[kblockd] 25root0-20000S0.00.00:00.00[md] 26root0-20000S0.00.00:00.00[edac-poller] 33root200000S0.00.01:19.07[kswapd0] 34root255000S0.00.00:00.00[ksmd] 35root3919000S0.00.00:12.80[khugepaged] 36root0-20000S0.00.00:00.00[crypto]
如何按照指定字段对结果进行排序
在top命令的最新版本中,按下f键进入字段管理界面。
要使用新字段进行排序,请使用up/down箭头选择正确的选项,然后再按下s键进行排序。最后按q键退出此窗口。
FieldsManagementforwindow1:Def,whosecurrentsortfieldis%CPU NavigatewithUp/Dn,RightselectsformovethenorLeftcommits, 'd'ortogglesdisplay,'s'setssort.Use'q'ortoend! PID=ProcessIdnsUTS=UTSnamespaceInode USER=EffectiveUserNameLXC=LXCcontainername PR=PriorityRSan=RESAnonymous(KiB) NI=NiceValueRSfd=RESFile-based(KiB) VIRT=VirtualImage(KiB)RSlk=RESLocked(KiB) RES=ResidentSize(KiB)RSsh=RESShared(KiB) SHR=SharedMemory(KiB)CGNAME=ControlGroupname S=ProcessStatusNU=LastUsedNUMAnode %CPU=CPUUsage %MEM=MemoryUsage(RES) TIME+=CPUTime,hundredths COMMAND=CommandName/Line PPID=ParentProcesspid UID=EffectiveUserId RUID=RealUserId RUSER=RealUserName SUID=SavedUserId SUSER=SavedUserName GID=GroupId GROUP=GroupName PGRP=ProcessGroupId TTY=ControllingTty TPGID=TtyProcessGrpId SID=SessionId nTH=NumberofThreads P=LastUsedCpu(SMP) TIME=CPUTime SWAP=SwappedSize(KiB) CODE=CodeSize(KiB) DATA=Data+Stack(KiB) nMaj=MajorPageFaults nMin=MinorPageFaults nDRT=DirtyPagesCount WCHAN=SleepinginFunction Flags=TaskFlags CGROUPS=ControlGroups SUPGIDS=SuppGroupsIDs SUPGRPS=SuppGroupsNames TGID=ThreadGroupId OOMa=OOMEMAdjustment OOMs=OOMEMScorecurrent ENVIRON=Environmentvars vMj=MajorFaultsdelta vMn=MinorFaultsdelta USED=Res+SwapSize(KiB) nsIPC=IPCnamespaceInode nsMNT=MNTnamespaceInode nsNET=NETnamespaceInode nsPID=PIDnamespaceInode nsUSER=USERnamespaceInode
对top命令的旧版本,请按shift+f或shift+o键进入字段管理界面进行排序。
要使用新字段进行排序,请选择相应的排序字段字母,然后按下回车键排序。
CurrentSortField:Nforwindow1:Def Selectsortfieldviafieldletter,typeanyotherkeytoreturn a:PID=ProcessId b:PPID=ParentProcessPid c:RUSER=Realusername d:UID=UserId e:USER=UserName f:GROUP=GroupName g:TTY=ControllingTty h:PR=Priority i:NI=Nicevalue j:P=Lastusedcpu(SMP) k:%CPU=CPUusage l:TIME=CPUTime m:TIME+=CPUTime,hundredths *N:%MEM=Memoryusage(RES) o:VIRT=VirtualImage(kb) p:SWAP=Swappedsize(kb) q:RES=Residentsize(kb) r:CODE=Codesize(kb) s:DATA=Data+Stacksize(kb) t:SHR=SharedMemsize(kb) u:nFLT=PageFaultcount v:nDRT=DirtyPagescount w:S=ProcessStatus x:COMMAND=Commandname/line y:WCHAN=SleepinginFunction z:Flags=TaskFlags Note1: Ifaselectedsortfieldcan'tbe shownduetoscreenwidthoryour fieldorder,the'<'and'>'keys willbeunavailableuntilafield withinviewablerangeischosen. Note2: Fieldsortingusesinternalvalues, notthoseincolumndisplay.Thus, theTTY&WCHANfieldswillviolate strictASCIIcollatingsequence. (shameonyouifWCHANischosen)
总结
以上所述是小编给大家介绍的批处理模式下运行top命令的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!