故障现象:

1、服务器负载、网络IO、磁盘IO等都没有问题,很正常。

2、/var/log/secure日志无报错。

3、/var/log/maillog日志,10点48的时候提示连接不上redis服务,500条左右这样的报错。

Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: dict(zheng@test.com,10.0.45.214): Failed to lookup key shared/passdb/10.0.45.214/pop3/zheng@test.com
Aug 23 10:48:46 kkmail dovecot: auth-worker(1818): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused
Aug 23 10:48:46 kkmail dovecot: auth-worker(1818): Error: dict(jd@test.com,10.0.55.234): Failed to lookup key shared/passdb/10.0.55.234/pop3/jd@test.com
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: dict(zhao@test.com,10.0.154.104): Failed to lookup key shared/passdb/10.0.154.104/pop3/zhao@test.com
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: dict(jun.chen@test.com,10.0.33.115): Failed to lookup key shared/passdb/10.0.33.115/imap/jun.chen@test.com
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: dict(fhui.li@test.com,172.24.1.66): Failed to lookup key shared/passdb/172.24.1.66/imap/fhui.li@test.com
Aug 23 10:48:46 kkmail dovecot: auth-worker(1813): Error: redis: connect(127.0.0.1, 10035) failed: Connection refused


4、紧接着就一直报这个错误,并且造成服务器僵死,ssh远程不过去:

Aug 23 10:56:11 kkmail dovecot: anvil: Error: net_accept() failed: Too many open files
Aug 23 10:56:11 kkmail dovecot: config: Error: net_accept() failed: Too many open files


5、netstat查看IMAP和POP3很多closed_wait状态(有时间研究下什么情况下可能会出现)


解决步骤:
1、怀疑linux句柄数满的时候,使用如下命令查询句柄数说被哪个进程占了。

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more (第一列是数量,第二列是进程ID)
lsof  -n|awk  '{print $2}' |sort|uniq -c|sort -nr | sed '$d' |awk '{sum += $1} END {print sum}' (统计所有之和,监控最好监控下这个)
备注:这点我没注意看。


2、更改最大打开文件数。
(1)要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:

session required /lib64/security/pam_limits.so


(2)Linux更改最大连接数.
解决办法:解除 Linux 系统的最大进程数和最大文件打开数限制:

vi /etc/security/limits.conf
*                soft    nproc          655350
*                hard    nproc          655350
*                soft    nofile         655350
*                hard    nofile         655350


3、重启服务器,要不有些占用的不会释放。重启完成后ulimit -n验证。

4、vi /etc/rsyslog.conf发现maillog日志被定向到另外一台服务器了,取消了。

5、服务器可以远程进去,邮件收发正常,不慢了。



总结:
1、可能是redis崩溃引起的Error: net_accept() failed: Too many open files故障,也有可能是Error: net_accept() failed: Too many open files故障引起的redis崩溃。
2、其实不知道具体怎么引起的,大神知道的麻烦留言给我下,谢谢。