为 systemd 服务设置合理的重启边界

Restart=always 可以提高短暂故障后的恢复速度,也可能把配置错误变成持续的重启循环。服务单元需要同时考虑重启策略、频率限制和资源上限。 区分退出原因 对网络服务通常使用 Restart=on-failure,并通过 RestartPreventExitStatus 排除明确不应重试的退出码。启动前增加配置检查,可以避免错误配置进入循环。 限制重启频率 StartLimitIntervalSec 和 StartLimitBurst 应根据服务启动时间设置。限制触发后保留失败状态,比每秒重启一次更利于排查。 留出诊断空间 资源限制不能只写最大文件描述符。内存上限、任务数量和日志速率都应结合正常峰值设置,并在修改后做一次故障演练。

2026年9月11日 · 1 分钟 · Northline

Linux 内存看起来用满了并不等于内存不足

Linux 会主动利用空闲内存缓存文件,因此 used 很高通常是正常现象。判断是否紧张,应优先观察 available、交换活动和内存压力。 区分页缓存与匿名内存 页缓存在需要时可以回收,应用堆和匿名映射通常不能直接回收。/proc/meminfo、smem 和 cgroup 指标可以帮助确认内存由谁持有。 观察压力而不只是容量 持续 swap in/out、直接回收和 PSI memory pressure 比单个使用率更能反映实际影响。如果服务有 cgroup 限制,还需要同时查看容器内部和宿主机。 为故障保留证据 OOM 后应查看内核日志中的被杀进程、RSS 和 cgroup。只重启服务会丢失最有价值的容量信息。

2026年6月14日 · 1 分钟 · Northline

用 rsync 和目录切换完成静态站点发布

直接覆盖线上目录时,用户可能在复制过程中读取到不完整资源。即使站点很小,也可以通过临时目录和原子切换减少这个窗口。 先同步到新目录 将构建产物复制到带版本号的目录,完成文件数量、哈希和权限检查。不要在服务器上执行前端构建,生产机只接收确定的产物。 切换软链接 Web 根目录指向 current,发布完成后原子更新软链接,再平滑 reload。旧版本暂时保留,出现问题时可以快速切回。 清理要有保留策略 按版本数量或时间清理旧目录,不使用无条件通配删除。发布脚本应在路径为空或不符合预期时立即退出。

2026年5月9日 · 1 分钟 · Northline

防火墙规则需要同时检查顺序和计数

看到一条允许规则不代表流量一定能通过。防火墙按顺序处理,前面的拒绝、跳转链和连接状态规则都会改变最终结果。 从默认策略开始 确认 INPUT、FORWARD 和 OUTPUT 的默认策略,再追踪自定义链。云平台安全组和系统防火墙属于两层控制,也需要分别检查。 观察命中计数 发起一次可控连接后查看规则计数是否增加。没有命中通常说明流量没到服务器、协议族不对,或已经被前置规则处理。 修改前准备回滚 远程修改管理端口规则时,应设置自动回滚任务并保持已有 SSH 会话。新连接验证成功后,再取消回滚。

2026年1月18日 · 1 分钟 · Northline