Linux 内存告警别只看 free:RSS、PSS、Page Cache 与 OOM 排查

Linux 内存排障封面

服务器提示“内存快满了”,第一反应往往是找出 RSS 最大的进程,甚至直接重启服务。但 Linux 会主动利用空闲内存缓存文件,同一份共享页也可能被重复计入多个进程。先分清指标含义,再沿着系统、cgroup、进程三层收集证据,才能判断是正常缓存、真实泄漏,还是容器限额过小。

Read More

把事务并发做对:隔离级别、锁与冲突重试

数据库事务并发控制

事务能保证一组操作一起成功或失败,却不等于并发执行时业务结果一定正确。两个请求同时读库存、计算新值再写回,即使都提交成功,也可能覆盖彼此的修改。解决这类问题,关键不是机械地把隔离级别调到最高,而是先写清业务不变量,再为具体冲突选择原子更新、锁或版本检查。

Read More

把 CSP 落稳:从 Report-Only 到 nonce 的渐进防护清单

内容安全策略防护浏览器资源加载

一次遗漏的输出转义、一个被污染的富文本字段,都可能让脚本进入页面。内容安全策略(Content Security Policy,CSP)能让浏览器只执行可信来源的资源,为 XSS 再加一道边界。但直接上线严格策略,往往先把统计脚本、字体和业务代码一起拦掉。更稳妥的办法是先观察、再收敛、最后阻断。

Read More

文件描述符为何越用越少:用 /proc、lsof 与 strace 定位泄漏

Linux 文件描述符泄漏诊断

服务运行几天后突然报出 Too many open files,重启又恢复正常,通常不是“机器偶尔抽风”,而是某类文件描述符只打开、不释放。文件、Socket、管道和事件通知在 Linux 中都占用描述符;泄漏增长得很慢时,故障甚至会跨过多次常规监控窗口。定位它的关键,是先证明数量持续增长,再找出增长最快的资源类型,最后回到创建与关闭路径。

Read More

别只枚举样例:用 Property-Based Testing 自动寻找边界反例

基于性质的测试与自动反例搜索

传统单元测试由开发者挑选几个输入,再核对预期输出。它对已知场景很有效,却容易漏掉空数组、极端整数和意外组合。Property-Based Testing(基于性质的测试)换了一个角度:先描述对所有合法输入都应成立的规则,再让工具批量生成数据、寻找反例,并把失败输入缩减到最容易理解的形态。

Read More