文章摘要
这篇文章解释了htop工具中各项指标的含义,纠正了作者对负载平均值1.0代表CPU使用率50%的误解,并详细介绍了进程状态、PID等关键信息。
文章总结
好的,作为一名专业的中文编辑,我将对您提供的英文文章进行中文重述。我会保留核心细节,同时删减与主题无关或过于冗长的部分,使内容更精炼、重点更突出。
htop 详解
长久以来,我并不完全理解 htop 中各项指标的含义。
我曾以为,在双核机器上,负载平均值 1.0 意味着 CPU 使用率为 50%。这个理解并不准确。而且,为什么它显示的是 1.0?
我决定彻底查清每个指标的含义,并在此记录下来。
人们常说,最好的学习方式就是尝试去教别人。
运行时间 (Uptime)
运行时间显示系统已运行了多久。你可以通过运行 uptime 命令来查看相同的信息。
uptime 程序通过读取 /proc/uptime 文件来获取信息。该文件包含两个数字:第一个是系统启动后的总秒数,第二个是系统空闲的总秒数(在多核系统上,空闲时间可能是总运行时间的数倍)。
负载平均值 (Load Average)
除了运行时间,uptime 还会显示三个代表负载平均值的数字。它们来自 /proc/loadavg 文件。
/proc/loadavg 文件的前三列分别代表过去 1 分钟、5 分钟和 15 分钟的平均系统负载。第四列显示当前正在运行的进程数和总进程数。最后一列是最近使用的进程 ID。
负载平均值 是通过计算处于运行状态(正在运行或等待运行)和不可中断状态(等待磁盘或网络活动)的进程数量得出的。它本质上是一个进程数量。
负载平均值是负载数量的指数衰减移动平均。从数学上讲,这三个值始终在平均系统启动以来的所有负载,只是衰减速度不同。因此,1 分钟负载平均值并非只包含过去 60 秒的活动,而是主要反映最近一分钟的情况。
简化理解:在单核 CPU 上,如果负载平均值为 1.00,意味着平均有 1 个进程在运行,CPU 利用率为 100%。如果我有两个核心,那么 CPU 利用率为 100% 时,负载平均值应为 2.00。你可以通过 nproc 命令查看 CPU 核心数。
需要注意的是,由于负载数字也包含对 CPU 利用率影响不大的不可中断进程,因此不能完全准确地从负载平均值推断 CPU 使用率。
进程 (Processes)
在 htop 的右上角,它显示的是总进程数(Tasks)和正在运行的进程数。Linux 内核内部将进程称为任务(task),htop 使用“Tasks”可能是为了节省屏幕空间。
进程 ID (PID)
每次启动新进程时,它都会被分配一个标识号,即进程 ID (PID)。进程 ID 非常有用,可以用来查看进程详情或控制进程。所有与进程相关的信息都位于 /proc/<pid>/ 目录下。例如,/proc/<pid>/cmdline 提供启动进程的命令,/proc/<pid>/cwd 指向当前工作目录,/proc/<pid>/exe 指向可执行文件。
进程树 (Process Tree)
启动新进程时,启动它的进程称为父进程,新进程是子进程。这些关系形成树状结构。在 htop 中按 F5 键可以查看进程层级。
进程用户 (Process User)
每个进程都归一个用户所有。用户通过数字 ID 表示。id 命令可以从 /etc/passwd 和 /etc/group 文件中查找用户 ID 对应的名称。
当你运行一个程序时,它将以你的用户身份运行。如果你想以 root 或其他用户身份运行程序,可以使用 sudo。
进程状态 (Process State)
htop 中进程状态列用字母 S 表示。可能的值包括:
- R:运行中或可运行(在运行队列中)。进程的代码指令正在被 CPU 执行。
- S:可中断睡眠(等待事件完成)。进程正在等待某个事件或条件发生,例如
sleep命令。可以通过发送信号(如SIGINT,即CTRL+C)来中断它。 - D:不可中断睡眠(通常是 I/O)。无法通过信号唤醒此进程。这种状态通常发生在进程必须等待 I/O(如磁盘读写)且不能被打断时。
- Z:僵尸进程,已终止但未被父进程回收。子进程在父进程未通过
wait系统调用获取其退出状态时变成僵尸进程。僵尸进程不消耗内存,只占用进程 ID。你不能杀死僵尸进程,但可以杀死其父进程来清除它们。 - T:被作业控制信号停止。例如,在前台运行进程时按下
CTRL+Z。 - t:在跟踪期间被调试器停止。
进程时间 (Process Time)
Linux 是一个多任务操作系统,通过时间共享实现。每个进程运行一小段时间(称为时间片),然后被挂起,让其他进程轮流运行。这解释了为什么负载平均值是运行进程的平均数量,以及为什么进程的运行时间可能不完全等于实际经过的时间。
进程优先级 (Niceness and Priority)
当任务数超过可用 CPU 核心数时,调度器负责决定下一个运行哪个任务。
- Niceness (NI):用户空间的优先级,范围从 -20(最高优先级)到 19(最低优先级)。一个“友好”的进程会更多地让位于其他进程。
- Priority (PRI):内核空间使用的优先级,范围从 0 到 139。用户无法直接更改优先级。
内存使用 - VIRT/RES/SHR/MEM
进程通过虚拟内存拥有独占内存的假象。内核将虚拟地址转换为物理内存或磁盘。
- VIRT/VSZ (虚拟镜像):任务使用的虚拟内存总量,包括所有代码、数据、共享库以及已换出和已映射但未使用的页面。这个数字通常不实用。
- RES/RSS (常驻内存大小):任务使用的非交换物理内存,即当前在物理内存中的部分。这是比 VIRT 更好的内存使用指标,但请注意,部分内存可能与其他进程共享。
- SHR (共享内存大小):任务使用的共享内存量,反映了可能与其他进程共享的内存。
- MEM% (内存使用率):任务当前使用的可用物理内存份额,即
RES除以总 RAM。
进程列表分析
文章还详细分析了 Ubuntu Server 16.04 上 htop 中常见的各个进程,例如 /sbin/init (systemd)、systemd-journald (日志收集)、lvmetad (LVM 元数据缓存)、udevd (设备管理器)、timesyncd (时间同步)、atd (一次性任务调度)、snapd (Snap 包管理)、dbus-daemon (进程间通信)、cron (周期性任务调度)、rsyslogd (日志记录)、acpid (电源管理)、sshd (SSH 守护进程) 等,并说明了它们的作用以及是否可以安全移除。
附录
文章还简要介绍了如何通过 strace 和查看源代码来了解程序行为,解释了文件描述符重定向的语法(2>&1),并提供了一个用 C 语言编写的简单 shell 示例,演示了 fork、exec 和 wait 系统调用的使用。
总结: 这篇文章深入浅出地解释了 htop 工具中各项指标的含义,包括运行时间、负载平均值、进程状态、内存使用等,并提供了实用的 Linux 系统知识,如进程管理、信号、文件系统和系统服务。
评论总结
根据评论内容,主要观点和论据总结如下:
正面评价与实用技巧
- 多数用户认可htop的实用性,并分享使用经验。例如,TheChaplain表示“This is really good! I use htop often but pretty much only use it to find pid or cpu-culprits”(评分:None),wyclif称“I've had this bookmarked since 2016, and have referred to it many times over the years”(评分:None)。
- 用户thijson提供技巧:“For top if you use the > character it will sort by memory usage. I use that sometimes to figure out why my host is becoming laggy”(评分:None)。
- cogman10建议优化设置:“2 Settings I change on every htop which makes a HUGE difference. 1. I disable user threads. 2. I enable the process tree view”(评分:None)。
批评与替代工具推荐
- 部分用户指出htop的局限性。amelius批评:“A bit silly that you can see a load average but not the amount of Watts used by your system”(评分:None),并认为“Nowadays most of my processing happens on the GPU, so htop/top better evolve or become mostly irrelevant”(评分:None)。
- 多位用户推荐btop作为替代。imrehg表示“I've relatively recently migrated over to using btop... it seems to shows the Watts used as well (and network, and GPU, and disks)”(评分:None),MomsAVoxell直接建议“s/htop/btop/ You'll be glad you did”(评分:None)。
社区氛围观察
- fractorial提出对社区状态的疑问:“Anyone else feel as if HN is healing? I hope this isn't the walking-ghost era of HN”(评分:None),反映对平台氛围的微妙关注。
总结:评论整体认可htop的实用性,但强调其功能局限(如缺乏功耗、GPU监控),并倾向推荐功能更全面的btop。用户分享的配置技巧(如禁用用户线程、启用树状视图)和排序方法(如按内存排序)具有参考价值。