像经验丰富的工程师一样使用 top 命令

目录
大家好,
我是Mandai,Wild团队负责开发工作的成员。
据说,当所谓的黑客绕过各种监控和封锁措施登录服务器时,他们输入的第一个命令是“w”命令,但当服务器管理员检测到异常时,他们输入的第一个命令可能是“ps”命令或“top”命令。
这次,我会更认真一些,介绍如何使用 top 命令,让你在人群中脱颖而出。
开始之前
运行 top 命令时,它会分为两个区域:上方的摘要区域显示整个系统的资源,下方的任务区域显示正在运行的进程。
下面我们将介绍的许多函数都会影响这些函数之一,我们将在解释中使用它们,所以请记住它们。
如何输入 top 命令
首先我想说的是,通过 SSH 登录后,就这么迅速地输入“top”命令,似乎有点业余。
与其他命令一样,`top` 命令也允许你设置参数,所以没有理由不使用这个功能。
最好在登录后花些时间思考一下你需要哪些参数。
例如,要查看正在执行的完整命令,请键入
top -c
我们假设这一点。
另外,如果您想更改默认的屏幕刷新率(3秒),
top -d 0.5 # 每 0.5 秒更新一次屏幕
我们假设这一点。
同时发布以上两项:
top -c -d 0.5 # 或 top -cd 0.5 # 以下命令无效:top -dc 0.5
好,我们开始吧。
如果刷新屏幕太快,屏幕负载可能会比你预想的要高,所以要适度操作。
执行过程中你可以做什么
摘要区域显示切换
摘要区域大致分为三个部分。
- 正常运行时间和总体负载信息(l)以红色圆圈标出
- CPU 和任务信息 (t) 以绿色框括起来
- 内存和交换信息 (m) 被蓝色边框包围
您可以通过按相应的键(括号中的键)来显示/隐藏这些内容。
另一个重要的按键是“1”。如果您按下此键,如果您的CPU是多核的,则会分别显示每个核心的负载。
任务区域显示切换
默认的顶部屏幕可以让你了解当前的系统负载,但确实也有很多项目没有显示出来。
在 `top` 命令运行时,按下“f”键会显示 `top` 命令可以显示的项目列表,您可以配置要显示或隐藏的项目。
在此屏幕上,您可以上下移动光标。将光标移动到要显示的项目上,然后按下“d”键或空格键将其加粗,该项目就会显示出来。
交换使用情况(出乎意料地难以获得)也可以在上屏幕上获得。
此外,如果在上下移动后按右键,则会选中整个项目;如果在该状态下按上下键,则可以调整项目的显示顺序。
下面的视频显示了交换空间的使用情况,并将其显示在命令的最前面。
信号传输
对于不熟悉信号的人来说,维基百科请参考
在 top 命令中可以执行相当于“kill [pid]”的操作。
要做到这一点,请在 top 程序运行时按下“k”键。如果您此时不小心按下了“k”键,可以按 Esc 键退出。
任务区域上方将显示“要发出信号/终止的进程 ID”消息,请输入要终止的进程 ID。
接下来,你会看到一条消息,提示“发送进程 ID [PID] 信号 [15/sigterm]”,请发送你想要发送的信号名称/信号编号。
默认情况下,它会发送 sigterm (15) 信号,如果进程没有因此崩溃,请尝试发送 sigkill (9) 信号。
我推荐这样做,因为你可以在查看顶部屏幕的同时终止进程。
专家级分屏模式(交替显示模式)
出于某种原因,top 有一个备用显示模式,可以将屏幕分成最多四个部分来查看正在运行的进程。
分屏模式(我们在这里这样称呼它;man top 的翻译版本称之为“替代显示模式”)和普通全屏模式之间切换。
进入分屏模式时的屏幕布局如下:
这不是通常的首页!也不是bug。
它的设计理念是,您可以设置最多四个不同的任务区域,并根据要显示的项目调整字段,然后在它们之间切换。
默认屏幕为屏幕 1。要切换到其他屏幕,请按“a”键向前移动,按“w”键向后移动。
要跳转到特定页面,请按“g”键,然后输入 1 到 4 之间的数字,但只有四页,所以您可能不需要使用此方法。
切换到其他屏幕后,按“Shift + A”键即可返回全屏模式。
此时,任务区域将以不同的格式显示,所有进程将铺满整个屏幕。
对于每个屏幕,您可以使用“f”来调整字段并指定排序依据的字段,以便进行调整。
如果在分屏模式下调整程序后退出,更改将恢复到原始状态;因此,如果输出下面描述的设置文件,下次启动程序时,更改将反映在程序中。
启动时预定义输出状态
使用 `top` 命令检测异常并检查结果时,时间往往至关重要,因此每次都带参数运行命令会浪费时间。
在这种情况下,将参数写入配置文件是一种可行的解决方案。
定义显示状态的配置文件通常会输出到每个用户的名为“$HOME/.toprc”的文件中。
设置很简单:只需在顶部菜单中配置您喜欢的显示方式,然后按“W”键完成即可。
由于“W”是大写字母,如果您关闭了大写锁定键,则需要按“Shift + w”。
生成的文件如下所示:
top 的配置文件(Linux 进程与窗口)Id:i,Mode_altscr=0,Mode_irixps=1,Delay_time=3.0,Curwin=0 2 fieldscur=\¨³´»½ÀÄ·º¹Å&')*+,-./012568<>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844,sortindx=18,maxtasks=0,graph_cpus=0,graph_mems=0 summclr=1,msgsclr=1,headclr=3,taskclr=1 Job fieldscur=¥¦¹·º(³´Ä»½@<§Å)*+,-./012568>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=161076, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=6, msgsclr=6, headclr=7, taskclr=6 1 fieldscur=\º»<½¾¿ ÀÁMBNÃD34·Å&'()*+,-./0125689FGHIJKLOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=5, msgsclr=5, headclr=4, taskclr=5 Usr fieldscur=¥¦§¨ª°¹·ºÄÅ)+,-./1234568;<=>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844, sortindx=3, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=3, msgsclr=3, headclr=2, taskclr=3 Fixed_widest=0, Summ_mscale=0, Task_mscale=0, Zero_suppress=0
说实话,在这种状态下,完全不清楚发生了什么(虽然如果单独检查每个部分,也不是完全看不懂),所以我认为最好避免手动创建这个文件。
反之,只要复制粘贴,配置正确的文件就可以应用到其他机器上,因此即使使用 chef 或 ansible 构建,也可以轻松反映出来。
为 top 命令准备多个配置文件
如果你对顶部屏幕的设置非常讲究,你可能需要准备多个屏幕设置,并根据不同情况使用。
不过,正如前面提到的,顶部屏幕设置文件位于“$HOME/.toprc”。
事实上,这并不是正确的解释。
正确的格式是“$HOME/.[顶级名称]rc”。
我做了些实验,想看看“顶级名称”是什么意思。
# 检查当前 top 路径 $ which top /usr/bin/top # 在 /usr/bin/mytop 中创建指向 /usr/bin/top 的符号链接 $ sudo ln -s /usr/bin/top /usr/bin/mytop # 尝试运行它 $ mytop
这样可以正常工作,顶部也能正常打开。
现在,如果您更改任何字段或显示并保存,则会创建一个名为“$HOME/.mytoprc”的文件。
这样,您就可以创建符号链接来写入不同的配置文件。
由于您以不同的名称运行自定义版本的 top 命令,因此不会影响常规的 top 命令。
以批处理模式启动
把 `top` 命令仅仅看作一个在屏幕上实时显示系统状态的工具是很大的误解。它和 `vmstat` 和 `sar` 命令一样,也具有批处理模式,允许你将输出流式传输到标准输出进行处理和保存。
以下命令会将 `top` 的输出流式传输到标准输出。
top -b -n 5 -d 0.5
“-b”选项使程序以批处理模式运行,“-n”选项指定显示输出的次数。
“-d”选项指定显示间隔。
在这种情况下,顶部屏幕的结果将以 0.5 秒的间隔发送到标准输出 5 次。
当然,你可以将其通过管道传递给其他命令,但以下命令通常是不正确的。
top -b -n 5 -d 0.5 | head -n 5
如果你试一下,就会明白它的意思。
看看这条命令,你大概能猜到想要得到什么样的结果,但是 `top` 命令并不适合这个用途。
概括
顶部命令是一个很有用的命令,在很多情况下都很有用,但是您是否意识到,通过自定义它可以变得更加有用?
这就是它的完整样貌,但有趣的是,您可以根据自定义选项,将其做得非常精致。
我们就是这样全年365天、每天24小时监控服务器的。
就这样。
4


