笔记
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)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
进程凭空消失,dmesg 里躺着一行 OOM 判决书
一台跑构建任务的机器,node 进程干着干着就没了,没有报错日志、没有 core dump,systemd 那边显示 exited,代码里也没写退出的路径。怀疑是被 OOM killer 干掉的,去内核日志里翻判决书。
查看内核日志里有没有 oom 相关的记录:
dmesg -T | grep -i -B2 -A5 "killed process"
journalctl -k --since "2 hours ago" | grep -i -E "oom|killed process"
dmesg -T 是把时间戳转成可读时间,不然是一串单调递增的秒数,对不上出事的时间点。我这边抓到的是这样几行:
[六 9月 2 03:12:44 2026] node invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=0
[六 9月 2 03:12:44 2026] Node 0/DMA32: 12*4kB (U) 34*8kB (U) ...
[六 9月 2 03:12:45 2026] Out of memory: Killed process 2846 (node) total-vm:5214728kB, anon-rss:3489152kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:10412kB oom_score_adj:0
[六 9月 2 03:12:45 2026] oom_reaper: reaped process 2846 (node), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
关键就两行:Out of memory: Killed process 后面跟着 PID、进程名、total-vm(虚拟内存总量)、anon-rss(匿名页常驻内存,这个才是真正占 RAM 的大头)、oom_score_adj。oom_reaper 那行说明内核的回收线程已经把进程彻底清掉了。看到这个基本坐实:进程是被 OOM killer 杀的,不是自己崩的。
为什么挑中这个进程杀,内核不是随机的。每个进程有个 oom_score,越大越容易被杀。匿名内存占得越多、分越高,root 进程有微调,最近占用 CPU 少的更容易被选上。可以实时看:
cat /proc/<pid>/oom_score
cat /proc/<pid>/oom_score_adj
oom_score_adj 是管理员可以调的,范围 -1000 到 1000。-1000 表示这个进程对 OOM killer 免疫,我一般给数据库、ssh 这类关键进程设上:
echo -1000 > /proc/$(pidof mysqld)/oom_score_adj
要永久生效得写在 systemd unit 里,加一行 OOMScoreAdjust=-1000。反过来给某个进程设正数就是"没内存先杀它",构建任务这种可重启的我偶尔会设个 500。
上面是整机内存耗尽的情况。现在很多服务跑在 cgroup 里,比如 systemd service 配了 MemoryMax,或者容器里,OOM 的日志形态不一样,报的是 Memory cgroup out of memory:
Memory cgroup out of memory: Killed process 9876 (java) total-vm:... anon-rss:...
这种情况整机内存可能还很宽裕,是单个 cgroup 超了它自己的限额。systemd 侧看 unit 状态会写得很清楚:
systemctl status myapp.service
如果看到类似 "Memory cgroup out of memory" 或者进程被 KILL 的信号杀掉,而服务配了 MemoryMax,先怀疑是不是限额设小了,而不是进程真的泄漏到整机内存不够。
还有个容易误判的对照:如果 bash 里跑命令返回 137,说明命令是被信号 9 杀死的,128+9=137。OOM kill 发的是 SIGKILL,所以退出码经常是 137。但 137 不全是 OOM,手动 kill -9 也是 137,所以要回到 dmesg 确认有没有对应的 Killed process 记录,别看到 137 就喊 OOM。
排查这种"进程消失"我现在的流程是:先 journalctl -k 或者 dmesg 找 oom-killer 和 Killed process,确认是不是 OOM;再 free -h 看是不是整机内存真耗尽了;再看是不是某个 cgroup 限额打死了它。如果 dmesg 里干干净净什么都没有,才回头怀疑是代码自己退的、被 supervisor 杀的、或者被 systemd 的 TimeoutStopSec 干掉的。
这台机器根因是构建并发开太多,几个 node 进程加起来把 2G 内存吃穿了,swap 当时还没配。临时把并发降下来,又补了 swapfile 才稳住,长期还是得加内存。