“写笔记”支持四种格式——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 系统监控的每一个细节
本文详细解释了 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 文件系统下的真实数据。理解这些指标的含义和来源,能帮助你更准确地诊断系统性能问题。