rsyslog服务异常导致Python rpc服务启动异常的排查
奇技 · 指南
今日分享:rsyslog服务异常导致Python rpc服务启动异常的排查
问题背景
1. ⼀次线上某个服务器的python rpc的agent端服务启动异常,执⾏启动⽆任何响应,且⽆任何报错;
2. 在去掉daemonize相关的代码后,服务可以正常启动。
问题排查
直接原因排查
对于这种⽆任何明确报错的异常,⾸先很明确想到⽤strace去跟踪⼀下整个启动过程,然后分析对⽐⼀下⼀些关键过程的差异,以下是对于分析诊断问题有关键意义的信息:
1. 启动异常
2. 启动正常
通过对⽐,可以知道,核⼼点在于对/dev/log的访问上,启动异常显⽰的信息为Connection refused
在尝试重启rsyslogd服务后,重启rpc的agent端服务,已经能正常启动了
daemonize的逻辑
2.Daemonize类中的start函数
从上面的逻辑可以看出,当该类初始化未指定logger时,会将⽇志定向到/dev/log,并且,在上⾯定位rsyslog服务状态时,得到的信息为:
可以判断出,rsyslog服务为异常终⽌,因此,/dev/log会因为来不及清理⽽残留,导致不可⽤(Connection refused)
问题修复
鉴于上⾯的两点原因,可以从以下两个⽅⾯进⾏修复:
1. 在Daemonize类初始化不指定logger时,保证系统rsyslog服务可⽤,或处于正常停⽌的状态(⽆/dev/log残留);
2. Daemonize类初始化时,指定logger;
后⾯分别针对上⾯两种修复做了验证,都能解决问题,在⽆法保证rsyslog服务状态(或需通过添加额外的机制检验)时,倾向于使⽤第⼆种修复⽅式。
中奖名单公布
一定要看清楚抽奖条件哦
另外,不要刷票!!!
活动一中奖名单:
一等奖:
二等奖:
三等奖:
活动二中奖名单:
小编说了中奖率很高!!
技术干货|一手资讯|精彩活动