通过本教程提高您对top命令的了解。尝试找出您的机器正在运行的程序,以及哪个进程正在占用内存并使系统变得非常非常慢——这就是top命令可以做的。top是一个非常有用的程序,其作用类似于Windows任务管理器或MacOS的活动监视器。在*nix机器上运行top将显示系统上运行的进程的实时状态。$top取决于您运行的最高版本,您将看到类似这样的内容:top-08:31:32up1day,4:09,0users,loadaverage:0.20,0.12,0.10Tasks:3total,1running,2sleeping,0stopped,0zombie%Cpu(s):0.5us,0.3sy,0.0ni,99.2id,0.0wa,0.0hi,0.0si,0.0stKiBMem:4042284total,2523744used,1518540free,263776buffersKiBSwap:1048572total,0used,1048572free.1804264cachedMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND1root2002196436323124S0.00.10:00.23bash193root200123520296368640S0.00.70:00.58flask195root2002360827242400R0.00.10:00.21top您使用的top版本可能与本专栏不一样。如何阅读输出你可以从输出中知道你在运行什么,但是试图解释结果可能会让人感到困惑。前几行包含一堆统计信息(详细信息),然后是包含结果列的表(列)。让我们从后者开始。这些是系统上运行的进程。默认按CPU使用率降序排列。这意味着列表顶部的程序使用了更多的CPU资源并且给您的系统带来了更多的负担。这些程序实际上是资源使用率最高的进程。不得不说top这个名字很巧妙。最右边的COMMAND列报告进程名称(启动它们的命令)。在此示例中,进程名称是bash(我们在上面运行的命令解释器)、flask(用Python编写的Web框架)和top本身。其他列提供有关进程的有用信息:PID:进程ID,用于定位进程的唯一标识符USER:运行进程的用户PR:任务的优先级NI:Nice值,优先级的更好表示VIRT:虚拟的大小memory,单位是KiB(千比字节)RES:常驻内存的大小,单位是KiB(物理内存和虚拟内存的一部分)SHR:共享内存的大小,单位是KiB(共享内存和虚拟内存的一部分))S:进程状态,一般I表示空闲,R表示运行,S表示休眠,Z表示僵尸进程,T或t表示停止(还有其他不太常用的选项)%CPU:自上次屏幕更新后的CPU使用率%MEM:RES自上次屏幕更新以来的驻留内存使用情况TIME+:自程序启动以来的总CPU使用时间COMMAND:启动命令,如前所述在日常运行中确切知道VIRT、RES和SHR值代表什么并不重要。重要的是要知道具有最高VIRT值的进程是使用最多内存的进程。当你在使用top排查为什么你的电脑运行无比卡顿时,VIRT值最大的进程就是罪魁祸首。如果你想知道共享内存和物理内存到底是什么意思,可以查看top手册的LinuxMemoryTypes部分。是的,我说的是千字节而不是千字节。通常称为千字节的1024值实际上是千字节。希腊语中的千(χ?λιοι)表示一千(例如,一公里是1000米,一千克是1000克)。Kibi是kilo和binary的组合,表示1024字节(或2^10)。但是,因为这个词实在是太难说了,所以很多人说1024bytes的时候就说kilobyte。top试图在这里使用适当的术语,所以请按照它所说的去做。屏幕更新说明实时屏幕更新是您可以使用Linux程序做的非常酷的事情之一。这意味着程序会实时更新它们显示的内容,因此它看起来是动态的,即使它们使用文本也是如此。很酷!在我们的例子中,更新间隔很重要,因为一些统计数据(%CPU和%MEM)是基于上次屏幕更新的值。由于我们在持久应用程序中运行,我们可以输入命令来实时修改配置(而不是停止应用程序并使用不同的命令行选项再次运行它)。按h调用帮助屏幕,该屏幕还显示默认延迟(屏幕更新之间的时间间隔)。此值默认为(大约)3秒,但您可以通过键入d(可能表示延迟)或s(可能表示屏幕或秒数)来更改它。详细信息进程列表中有大量有用的信息。有些细节看起来奇怪且令人困惑。但是,一旦您花点时间逐一浏览它们,您就会发现它们在紧要关头非常有用。第一行包含有关系统的一般信息:top:我们正在运行top!你好!顶部!XX:YY:XX:当前时间,每次屏幕更新时更新uptime(后跟X天,YY:ZZ):系统正常运行时间,或者说系统启动后经过了多长时间loadaverage(后跟三个数字):分别是过去一分钟、五分钟和十五分钟的系统负载。第二行(Task)显示正在运行的任务的信息,没有解释。它显示进程总数以及正在运行、睡眠、停止和僵尸进程的数量。这实际上是上面S(状态)列的总和。第三行(%Cpu(s))按类型显示CPU使用率。数据是屏幕刷新之间的值。这些值是:us:用户进程sy:系统进程ni:nice用户进程id:CPU空闲时间,当这个值比较高的时候,系统比较空闲wa:等待时间,或者说等待我/O完成hi:硬件中断花费的时间si:软件中断花费的时间st:“管理程序从该虚拟机窃取的时间”您可以通过单击t(切换)展开或折叠任务和%Cpu(s)行.第四行(KibMem)和第五行(KiBSwap)提供内存和交换空间信息。这些值是:totalmemorycapacityusedmemorybuffervalueoffreememorymemorybuffervalueofswapspace它们默认以KiB显示,但按E(扩展内存缩放)可以在不同的单位之间切换:KiB、MiB、GiB、TiB,PiB,EiB(kilobytes,megabytes,gigabytes,terabytes,petabytesandexabytes)topUserManual有更多选项和配置项信息。您可以运行mantop查看系统上的文档。HTML中也有许多手册页,但请注意,这些手册页可能适用于不同版本的top。top的两种替代方法您不必总是使用top来检查系统状态。您可以根据自己的情况使用其他工具来帮助解决问题,尤其是当您想要更图形化或更专业的界面时。htophtop类似于top,但它带来了一些非常有用的东西:它可以在图形界面中显示CPU和内存使用情况。下图是我们刚刚运行top的相同环境下的htop的样子。显示更简洁,但功能丰富。任务统计数据、负载、正常运行时间和进程列表仍然存在,但它具有漂亮、多彩、动态的每个内核CPU使用率和图形内存使用率。以下是不同颜色的含义(您还可以通过按h获得有关此信息的帮助)。CPU任务优先级或类型:蓝色:低优先级绿色:正常优先级红色:内核任务蓝色:虚拟任务缓存内存栏末尾的值显示已用内存和总内存如果这些颜色不适合您,您可以运行htop-C来禁用它们;然后htop将使用不同的符号来显示CPU和内存类型。它在底部有一组活动的按键提示,可用于操作过滤结果或更改排序顺序。尝试按一些快捷键以查看它们的作用。但是请小心尝试F9,它会显示一个信号列表,这些信号将杀死(即停止)一个进程。我建议在生产环境之外探索这些选项。htop的作者HishamMuhammad(是的,htop是以Hisham命名的)在2月份的FOSDEM2018上做了一个简短的演讲。他解释说,htop不仅有简单的图形界面,还有更现代的显示进程信息统计的方式,这是以前的工具(如top)所没有的。您可以在手册页或htop网站上阅读有关htop的更多信息。(提示:网站背景是一个动态的htop。)dockerstats如果你正在使用Docker,你可以运行dockerstats来为容器状态生成一个上下文丰富的界面。这可能比top更有帮助,因为它不是按进程排序,而是按容器排序。这特别有用,当容器运行缓慢时,查看哪个容器消耗资源最多比运行top并查找容器的进度更快。借助上面对top和htop术语的解释,您应该更容易理解dockerstats中的那些。但是,dockerstats文档提供了每一列的详尽描述。
