笔记
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)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
内存不够编译老被杀,扩了个 swapfile 顶上
一台 2G 内存的小机器,前端构建一跑就卡死,node 进程直接消失,八成是被 OOM 干掉的。手上暂时没有加内存的条件,先加交换分区顶一阵。
这台机器装系统的时候没分 swap 分区,云镜像默认就是裸奔的,free -h 里 Swap 那行全是 0。Linux 支持用普通文件当交换空间,比动分区省事,随时能删能扩,我决定走 swapfile 这条路。
先确认一下当前交换情况:
free -h
swapon --show
两个都没输出或者都是 0,就是没有交换。然后创建一个 2G 的文件:
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
有个坑先记下来:创建 swapfile 有人用 fallocate,快是真快,但某些文件系统上 fallocate 出来的文件是带洞的稀疏文件,mkswap 能过,swapon 的时候可能报:
swapon: /swapfile: swapon failed: Invalid argument
我这次图省事先用了 fallocate,就撞上这个错,后来换成 dd 重做一遍就好了。如果机器内存紧张到连写 2G 文件都费劲,可以 bs=1M count=1024 先来 1G,之后再扩。
swapfile 要开机自动挂上,得写进 /etc/fstab。swap 文件可以直接用路径写,这是最省事也最不容易出错的写法:
/swapfile none swap sw 0 0
用 UUID 也可以,先用 blkid /swapfile 查它的 UUID 再填成 UUID=xxxx 那种格式。但 swap 文件有个特殊性:它不像块设备那样 UUID 稳定,哪天你把文件删了重建一个更大的,UUID 就变了,fstab 里还是老 UUID,开机时会报 swapon failed,虽然不影响进系统,但日志里会一直挂着一个错。所以对 swapfile 我直接用路径,省掉这层麻烦。
改完 fstab 别急着 reboot,先 swapon -a 测一下能不能按 fstab 挂上,能挂上再重启验证,万一 fstab 语法写错,轻则这次开不了机,重则进 emergency mode 还得现场救。
后来内存需求又涨了,2G swap 不够,要扩容。swap 文件扩容比分区简单,先关掉再重来:
swapoff /swapfile
rm /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
其实就是把文件删了重建一个更大的,别的都不用动,fstab 那行继续有效。扩到 4G 以后 free -h 能看到 Swap 变成了 4Gi。
有几个相关参数顺手调了。vm.swappiness 控制内核多积极地把匿名页换到 swap,默认 60 偏向于多用 swap,对交互式桌面可以调低到 10 让内存优先,对服务器跑构建任务我直接设了 10:
sysctl vm.swappiness=10
要永久生效写进 /etc/sysctl.d/99-swap.conf:
vm.swappiness=10
还有个 vm.vfs_cache_pressure 是控制内核回收目录/文件缓存积极程度的,默认 100,一般不用动,我这次也没碰。
swapfile 在 btrfs 上是另一套说法,btrfs 对 swapfile 支持一直很麻烦,要开 compression 还得保证没有 COW,我自己主力是 ext4,没细究 btrfs 那边,如果有 btrfs 的机器建议直接建 swap 分区或者查一下对应内核版本的 btrfs swap 限制。
swap 用了多少、有没有在被频繁换页,光看 free -h 不够,我习惯用 vmstat 盯 si/so 两列(swap in / swap out):
vmstat 1 5
si、so 持续有数字,说明内存是真的不够用,系统在反复倒腾页,这种时候加 swap 只是续命,该降并发还是得降。swap 分配出去之后不会自己还给内存,除非内核回收了那些页,所以看到 free 里 available 不高、swap 却用掉不少,不用太慌,那多半是内核把冷页面挪过去腾地方,属于正常行为。
还有一个跟 swapfile 相关的休眠坑顺带记一下。如果想用这台机器做 suspend-to-disk(休眠到磁盘),内核的 resume 参数得能定位到交换设备,grub 的 resume= 直接写 swap 分区没问题,但对 swapfile 就得额外配 resume_offset,而且 offset 还会随文件在磁盘上的位置变化,一旦你删了重建 swapfile,offset 就变了,休眠配置跟着失效。所以我这边结论是:想长期用休眠就别碰 swapfile,老老实实划一个 swap 分区,省得每次重建都踩 offset 的坑。这台机器没有休眠需求,我没配 resume,先这样。
加了 swap 之后构建确实稳了,node 没再被杀,但能明显感觉到 swap 命中时整机变卡,这是预期内的,swap 是硬盘速度,跟内存差几个数量级。这属于临时方案,长期还是得加内存或者减并发,别把 swap 当救命稻草。记录一下过程,下次换机器直接照着做。