欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

htop 深度解析:Linux 系统监控的每一个细节

2026/7/4操作系统

本文详细解释了 Linux 下 htop/top 工具中每个指标的含义、数据来源和计算原理,涵盖 uptime、load average、进程状态等核心概念。

引言

很长时间以来,我都不完全理解 htop 中每个指标的具体含义。我曾以为在双核机器上 load average 为 1.0 意味着 CPU 使用率是 50% —— 但这是不准确的。而且,为什么这个数字是 1.0?我决定彻底查清楚,并把所有内容记录下来。正如人们所说,最好的学习方式就是尝试去教别人。

Uptime(运行时间)

Uptime 显示系统已经运行了多长时间。你可以通过运行 uptime 命令获取相同的信息:

$ uptime
12:17:58 up 111 days, 31 min, 1 user, load average: 0.00, 0.01, 0.05

uptime 程序是如何知道这些信息的?它从 /proc/uptime 文件中读取数据:

9592411.58 9566042.33

  • 第一个数字是系统启动以来的总秒数。
  • 第二个数字是机器处于空闲状态的秒数总和。

在多核系统上,第二个数字可能大于第一个数字,因为它是所有核心空闲时间的累加。

我是如何发现这一点的? 使用 strace 工具可以查看 uptime 程序打开了哪些文件:

$ strace uptime 2>&1 | grep open
...
open("/proc/uptime", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY) = 4

可以看到它打开了 /proc/uptime、/var/run/utmp(记录登录用户信息)和 /proc/loadavg(负载信息)。

既然可以直接读取文件,为什么还需要 uptime 程序?因为 uptime 的输出格式对人类更友好,而秒数更适合用于程序或脚本中。

Load Average(负载均值)

除了运行时间,uptime 还输出三个表示负载均值的数字:

$ uptime
12:59:09 up 32 min, 1 user, load average: 0.00, 0.01, 0.03

这些数字来自 /proc/loadavg 文件:

$ cat /proc/loadavg
0.00 0.01 0.03 1/120 1500

  • 前三列:最近 1、5、15 分钟的平均系统负载。
  • 第四列:当前正在运行的进程数 / 总进程数(如 1/120)。
  • 最后一列:最近使用的进程 ID。

进程 ID 的含义

每当你启动一个新进程,它会被分配一个 ID 号。进程 ID 通常是递增的,除非 ID 耗尽后开始重用。进程 ID 为 1 的是 /sbin/init,它在系统启动时启动。

让我们看看启动一个后台进程后 /proc/loadavg 的变化:

$ cat /proc/loadavg
0.00 0.01 0.03 1/123 1566
$ sleep 10 &
[1] 1567

1/123 表示当前有 1 个进程正在运行或准备运行,总共有 123 个进程。当你运行 htop 并看到只有 1 个运行进程时,那通常是 htop 自身。如果你运行 sleep 30 后再次查看 htop,会发现仍然只有 1 个运行进程 —— 因为 sleep 不是“运行中”,而是“睡眠”或“等待”状态。

运行进程 是指当前在物理 CPU 上执行或排队等待 CPU 执行的进程。

负载与 CPU 利用率的关系

如果你运行一个持续消耗 CPU 的任务:

$ cat /dev/urandom > /dev/null &
[1] 1639
$ cat /proc/loadavg
1.00 0.69 0.35 2/124 1679

现在有 2 个运行进程(随机数生成和读取 /proc/loadavg 的 cat),负载均值也上升了。

负载均值的计算方式 并非简单的平均。它实际上是指数衰减移动平均。根据维基百科:

从数学上讲,三个值都是对系统启动以来所有负载的平均,但它们以不同的速度衰减。1 分钟负载均值包含了最近 1 分钟 63% 的负载,加上启动以来剩余 37% 的负载。所以,1 分钟负载均值并不严格只包含最近 60 秒的活动,但确实以最近一分钟为主。

简化理解

虽然技术上不精确,但我们可以这样简化理解:

  • 如果有一个 CPU 密集型进程,在单核系统上,1 分钟负载均值为 1.00,意味着 CPU 利用率 100%。
  • 如果是双核系统,同样情况下 CPU 利用率会是 50%,因为系统可以同时运行两个进程。
  • 双核系统 100% CPU 利用率对应的负载均值是 2.00。

你可以在 htop 左上角看到核心数,或运行 nproc 查看。

注意:由于负载数字也包含不可中断状态的进程(如等待磁盘 I/O),它们并不完全等同于 CPU 利用率。这就是为什么有时你会看到高负载但 CPU 并不繁忙。

更精确的 CPU 利用率工具

可以使用 mpstat 查看瞬时 CPU 利用率:

$ sudo apt install sysstat -y
$ mpstat 1
Linux 4.4.0-47-generic (hostname) 12/03/2016 x86_64 (1 CPU)
10:16:20 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:16:21 PM all 0.00 0.00 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:16:22 PM all 0.00 0.00 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

停止随机数生成后:

10:17:00 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:17:01 PM all 1.00 0.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 97.00
10:17:02 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

为什么还要用负载均值?

Linux 内核源码中的注释道出了真相:

c
/*

  • kernel/sched/loadavg.c
  • This file contains the magic bits required to compute the global loadavg
  • figure. It's a silly number but people think it's important. We go through
  • great pains to make it work on big machines and tickless kernels.
    */

负载均值是一个“傻乎乎的数字,但人们认为它很重要”。

Processes(进程)

在 htop 右上角,显示的是总进程数和正在运行的进程数。但它写的是 Tasks 而不是 Processes。为什么?

因为进程的另一个名称是 任务(task)。Linux 内核内部将进程称为任务。htop 使用 Tasks 可能是为了节省屏幕空间。

你还可以在 htop 中查看线程。切换显示线程的快捷键是 Shift+H(显示/隐藏线程)。

(原文后续还有大量内容,包括 CPU 状态、内存、交换分区、进程状态、信号、优先级、文件系统等,此处已覆盖核心部分。)

总结

htop 中的每个数字都不是凭空产生的,它们都来自 /proc 文件系统下的真实数据。理解这些指标的含义和来源,能帮助你更准确地诊断系统性能问题。

原文链接:https://peteris.rocks/blog/htop/

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消