有没有一种方法,最好是简单的,如何检查 SLAB 缓存的内容,尤其是牙髓缓存?我可以想象这可以通过内核模块来实现,但我高度怀疑安全性是否会允许我将定制的内核模块安装到生产系统中。
我 99% 确定我们受到了 NSS dentry 泄漏的影响,但想查看缓存条目才能 100% 确定。
rhel,2.6.32 nss-softokn-3.14.3-23.3.0.1.el6_8.x86_64
谢谢!
答案1
Server Fault 之前已经讨论过这个问题:dentry 缓存使用率异常高导致RHEL 错误 1044666,curl HTTPS 请求是否可以减少访问系统调用?
无需检查缓存内容。从错误报告来看,缓存中的对象数量并不小,他们仅通过几次 curl 执行就获得了数百万个对象。此外,您可以通过使用 NSS 跟踪进程并查看对 access() 的调用来查看它访问文件。应该有大量对不存在的文件的访问。
设置环境变量缓存并重新测试。显然,需要将此环境变量设置为“是”或“否”以绕过文件系统速度测试。对不存在文件的过度访问应该停止,并且 slab 消耗会稳定下来。
一般情况下,板坯不应该无限制地生长。
随着时间的推移对其进行监控。例如,netdata 默认收集 slab。(不过,将其导出到具有更多保留的时间序列数据库,以查看几天和几周的趋势。)