技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战
通过这篇教程提升你的 top 命令的知识。
尝试找出你的机器正在运行什么程序,以及哪个进程耗尽了内存导致系统非常非常慢 —— 这是 top 命令所能胜任的工作。
top 是一个非常有用的程序,其作用类似于 Windows 任务管理器或 MacOS 的活动监视器。在 *nix 机器上运行 top 将实时显示系统上运行的进程的情况。
- $ top
取决于你运行的 top 版本,你会看到类似如下内容:
- top - 08:31:32 up 1 day, 4:09, 0 users, load average: 0.20, 0.12, 0.10
- Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
- %Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- KiB Mem: 4042284 total, 2523744 used, 1518540 free, 263776 buffers
- KiB Swap: 1048572 total, 0 used, 1048572 free. 1804264 cached Mem
-
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 1 root 20 0 21964 3632 3124 S 0.0 0.1 0:00.23 bash
- 193 root 20 0 123520 29636 8640 S 0.0 0.7 0:00.58 flask
- 195 root 20 0 23608 2724 2400 R 0.0 0.1 0:00.21 top
你所用的 top 版本可能跟这个看起来不一样,特别是在显示的列上。
如何阅读输出的内容
你可以根据输出判断你正在运行的内容,但尝试去解释结果你可能会有些困惑。
前几行包含一堆统计信息(详细信息),后跟一个包含结果列的表(列)。让我们从后者开始吧。
列
这些是系统正在运行的进程。默认按 CPU 使用率降序排序。这意味着在列表顶部的程序正使用更多的 CPU 资源并对你的系统造成更重的负担。对于资源使用而言,这些程序是字面上的消耗资源最多的(top)进程。不得不说,top 这个名字起得很妙。
最右边的 COMMAND 一列报告进程名(启动它们的命令)。在这个例子里,进程名是 bash (一个我们正在运行 top 的命令解释器)、flask (一个 Python 写的 web 框架)和 top 自身。
其它列提供了关于进程的有用信息:
PID :进程 ID,一个用来定位进程的唯一标识符
USER :运行进程的用户
PR :任务的优先级
NI :Nice 值,优先级的一个更好的表现形式
VIRT :虚拟内存的大小,单位是 KiB(kibibytes)
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 手册的 Linux Memory Types 段落。
是的,我说的是 kibibytes 而不是 kilobytes。通常称为 kilobyte 的 1024 值实际上是 kibibyte。希腊语的 kilo(χίλιοι)意思是一千(例如一千米是 1000 米,一千克是 1000 克)。Kibi 是 kilo 和 binary 的合成词,意思是 1024 字节(或者 2^10 )。但是,因为这个词很难说,所以很多人在说 1024 字节的时候会说 kilobyte。top 试图在这里使用恰当的术语,所以按它说的理解就好。
屏幕更新说明
(编辑:ASP站长网)
|