keepalived 服务器内存持续升高问题
问题现象线上两台 keepalived + lvs 机器,内存都被 slab 占光了,观察是 dentry 所占用的,经过排查,是因为keepalived 的 misc 调用 bash 脚本引起的。即使不是 misc 调用, bash 自己的正常的调用也会引起 slab 内存持续升高(使用 while 命令进行测试)。但是测试环境不是这样。
查找原因
...略过许多排查步骤。
使用 strace 命令跟踪脚本的调用,发现 B
脚本的系统调用特别多,而且此脚本的运行速度明显慢于 A 脚本。
这两个脚本的区别在于一个检测 http 服务,一个检测 https 服务。那么可能就是在 https 这里出的问题。
什么原因呢?于是将 strace 的结果输出到一个文件里,在文件里观察发现最多的就是access("/etc/pki/nssdb/.273583784_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory) 。查看此目录是由 nss 这个包产生的
# rpm -qf /etc/pki/nssdb/
nss-3.28.4-4.el6_9.x86_64
,然后搜索了 /etc/pki/nssdb/.273591295_dOeSnotExist_.db这个错误,发现了下面的几个链接,
原来这是 nss-softokn 的一个 bug, 有修改源码的方式,但是那样还得重新编译,最简单的方式就是
配置一个环境变量。export NSS_SDB_USE_CACHE=no ,一句话,立竿见影,slab 稳定了。世界安静了。
总结:
centOS6 当使用 curl 命令访问 https 服务的时候就会产生这个情况(因为nss-softokn这个包的 bug ),调用频繁就会使得 slab 内存持续明显上升。
参考如下:
[*]https://access.redhat.com/solutions/2968211 : Application is slow sometimes and slab usage is high
[*]https://bugzilla.mozilla.org/show_bug.cgi?id=956082 : Avoid call to sdb_measureAccess in lib/softoken/sdb.c s_open if NSS_SDB_USE_CACHE is "yes" or "no"
[*]https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1044666 : Can curl HTTPS requests make fewer access system calls?
[*]https://bugzilla.redhat.com/show_bug.cgi?id=1044666 : Bug 1044666 - Can curl HTTPS requests make fewer access system calls?
页:
[1]