高效的使用 top
Published by knick,
高效的使用 top
英文原文:Using Top More Efficiently
B .如何监控制定进程?有时,我们只对几个进程感兴趣,可能只是全部进程中的4个或5个。例如,如果你想要监测进程标识(PID)为4360和4358的进程,你需要键入: $ top -p 4360,4358或 $ top -p 4360 -p 4358 看起来很简单,只需要使用 -p 列出所有需要的 PID,并使用逗号间隔或简单的多次使用 -p即可。 $ top -u johndoeOR $ top -u 500或 $ top -U johndoe 结论是,你既可以纯使用用户名,也可使用数字 UID。“-u,-U?这两者不同?”是的。同多数其它 GNU 工具一样,选项是大小写敏感的。-U 意味着 Top 将会搜索有效的、真实的、被保存的以及文件系统的 UID 进行匹配,而 -u 仅匹配有效的用户id。要知道,每一个 *nix 进程在运行时都是用有效用户标识(effective UID),而其中有些并不等同真实用户标识。多数情况是,对类似文件系统权限或操作系统功能这项的有效用户标识感兴趣的人将会检查它,而不是 UID。 |
C .快熟还是缓慢更新?在回答这个问题之前,让我们先简单介绍一下,Top 是如何运行的。这里,Strace 能够帮助你: $ strace -o /tmp/trace.txt top -b -n 1 使用你偏爱的文本编辑器打开 /tmp/trace.txt。你怎么想?一次调用有太多的活要做了,反正我是这么想的。Top 在每次遍历中必做的工作之一就是打开很多文件,并解析其内容,可以看看次数: $ grep open( /tmp/hasil.txt | wc -l 举例而言,我的 Linux 中,这个数量是304.仔细观察就会发现,Top 遍历 /proc 文件夹,以收集进程信息。/proc 本身是一个虚拟文件系统,意味着它并非存在于真实硬盘之中,而是由 Linux 内核凭空创建,保存在内存中的。在文件夹中,如/proc/2097(2097为 PID),Linux 内核将与之关联的信息打印到此文件中,而这里就是 Top 的消息来源。 同时试一下: $ time top -b -n 1 这样你就能了解到 Top 单轮工作有多快了。在我的系统中,大约为0.5-0.6秒。看“real”字段,不是“user”或“system”字段,因为“real”字段反应了 Top 工作需要的总时间。 |
所以,有了这个认知之后,使用适度的更新间隔是明智的。基于文件系统访问内存也是需要时间的。经验法则是,对于多数用户来说,1到3秒的间隔就足够了。在命令行中使用-d,或在交互模式下按下“s”以设置。你可以使用类似2.5,4.1这样的小树。 什么时候我们需要快于1秒的更新?
一个减少 Top 工作的办法是只监测特定的几个 PID。这样,Top 无需遍历 /proc 下所有的子文件夹。用户名过滤呢?并不会变得更好。用户名过滤会给Top带来额外工作量,因此将其与短间隔联合将会增加 CPU 负荷。 当然,当你需要强制更新时,按下 Space 键,Top 将会刷新统计。 |
D .我们需要的字段默认时,Top 启动后会显示下面的任务属性:
|
不止这些。下面我介绍一些你可能会用到的列:
|
要显示以上的列,在交互模式下按 'f' 键,然后再按相应的键。按一下显示指定的列,再按一下隐藏该列。要确定当前显示的是哪些列,只需看第一行的字母(在"Current Fields"的右边)。大写字母表示显示了该列,小写表示隐藏。你选好以后,按回车即可。 排序使用了类似的方法。按 'O' (大写),然后再按相应的键。即使记不住那些按键也没关系,top 会显示出来。新的排序键将标上星号,相应的字母会变成大写,很直观。选好以后,记得按回车。 |
E .多视图比单个视图更好吗?在不同的情况下,有时候我们想监视不同的系统属性。例如,你想同时监控CPU的百分比和CPU被所有任务消耗的时间。在另一段时间,你想监控常驻内存和所有任务的总页面故障。快速按‘F’键然后切换界面?我想这也太不明智了吧。 为什么不试试多视图窗口模式呢?按‘A’(大写)切换到多窗口界面。默认的,你将会看到4个不同的系列的字段组。每个字段组有默认的标签/名称: 第一字段组: Def 第二字段组: Job 第三字段组: Mem 第四字段组: Usr 第一字段组就是你在单一视图窗口所常见的组,而其余的组会被隐藏。内置多视图窗口模式,所有可用的窗口通过按‘a’或者‘w’循环。注意,切换到其他窗口时会改变活动窗口(也称为当前窗口)。假如你不确定哪一个是活动窗口的话,只需要看一下top展示的第一行(在当前时间字段的左边)。另一个改变活动窗口的方法是通过按‘G’紧跟着输入数字(1到4)。 活动窗口是针对用户输入的,因此在开始干活之前确定选好了你偏好的界面。然后,你可以在单一窗口模式下爱干嘛干嘛。在这种情况你一般想自定义字段展示,那么你只需要按‘f’然后开始自定义。 假如你认为第四字段组太多的话,你只需要切换到字段组然后按‘-’隐藏。请注意,即使你隐藏了当前的字段组,那并不以意味着你同时改变了活动组。再次按‘-’的话,当前组就可见了。 如果你想操作多视图窗口模式,再次按‘A’键。那样也将使得活动组成为了单一视图窗口模式的新的字段组。 |
F. "我的Linux 主机上怎么会只有很少的空闲内存?"有同样的问题? 不管你在主板上增加多少内存,你都会很快发现空闲内存减少的非常迅速. 空闲内存算错了? 不! 在回答这个之前, 先查看一下top命令顶部显示的内存概要 (有可能你需要按 'm'来显示出来). 在这里,你可以看到两个区域: 缓冲(buffers)和缓存(cached)。 "缓冲(Buffers)" 代表有多少内存用来缓存磁盘块 "缓存(Cached)" 有一点类似 "缓冲(Buffers)", 只是仅仅从文件读取缓存页面. 想透彻了解这部分,建议读一下Linux内核的书比如Robert M.Love写的《Linux Kernel Development》。 这足够了解缓冲(buffers)和缓存(cached)代表系统缓存. 他们会根据linux内核机制动态增加或减少。 除去被缓存的消耗,程序和代码同样要占据RAM. 所以,最终空闲内存显示的是RAM中不被缓存和程序/代码占用的部分 一般来说,你也可以考虑缓存区域为另一部分“空闲”RAM,如果程序需要更多内存它会减少 从进程的角度来看,你可能想知道哪个区域代表真实的内存消耗,VIRT(virtual memory usage )区域? 当然不是! 回顾一下,这个区域代表了进程地址空间里一切,包括相关的库。阅读top命令的源代码和proc.txt (在内核代码树中的Documentation/filesystem 文件夹内), 我的结论是RSS字段是进程内存消耗的最好的描述.我说“最好的”是因为你可以考虑它是近似而不是所有时间100%准确。 |
G .使用数个保存的配置希望保存多个不同的配置文件,以便于轻松的切换预配置视图?只需要创建一个 Top 二进制文件的软连接到你喜欢的名字: # ln -s /usr/bin/top /usr/bin/top-a 然后运行新的“top-a”。调整完毕后键入‘W’保存配置,它将被保存到 ~/.top-arc(格式为你的 Top 别名+rc)。 这样,运行原来的 Top 可以使用之前的视图,而 top-a 则使用第二个,依次类推。 |
有很多窍门使用top会更加高效。关键是知道你真正需要的是什么和可能的对Linux低级别原理的一般理解。统计并不总是正确,但至少有助于总体衡量。所有这些数字收集自 /proc,因此首先确保它已挂载!
|