rsyslog服务异常导致Python rpc服务启动异常的排查

奇技 · 指南

今日分享:rsyslog服务异常导致Python rpc服务启动异常的排查

问题背景

1. ⼀次线上某个服务器的python rpc的agent端服务启动异常,执⾏启动⽆任何响应,且⽆任何报错;

2. 在去掉daemonize相关的代码后,服务可以正常启动。

下面是涉及的关键部分的代码

问题排查

直接原因排查

对于这种⽆任何明确报错的异常,⾸先很明确想到⽤strace去跟踪⼀下整个启动过程,然后分析对⽐⼀下⼀些关键过程的差异,以下是对于分析诊断问题有关键意义的信息:

  1. 1.       启动异常

  2. 2.       启动正常

通过对⽐,可以知道,核⼼点在于对/dev/log的访问上,启动异常显⽰的信息为Connection refused

⽽能够正常启动的显⽰信息为连接正常:

在服务能正常启动的服务器上,查看/dev/log文件是哪个程序在占用,可以知道该文件是rsyslogd进程所有:

同时,在服务不能正常启动的服务器上,查看rsyslogd服务是否正常,发现服务处于终止状态:

在尝试重启rsyslogd服务后,重启rpc的agent端服务,已经能正常启动了 

daemonize的逻辑

1.Daemonize 类的初始化函数:

2.Daemonize类中的start函数

从上面的逻辑可以看出,当该类初始化未指定logger时,会将⽇志定向到/dev/log,并且,在上⾯定位rsyslog服务状态时,得到的信息为:

可以判断出,rsyslog服务为异常终⽌,因此,/dev/log会因为来不及清理⽽残留,导致不可⽤(Connection refused)

问题修复

鉴于上⾯的两点原因,可以从以下两个⽅⾯进⾏修复:

1. 在Daemonize类初始化不指定logger时,保证系统rsyslog服务可⽤,或处于正常停⽌的状态(⽆/dev/log残留);

2. Daemonize类初始化时,指定logger;

后⾯分别针对上⾯两种修复做了验证,都能解决问题,在⽆法保证rsyslog服务状态(或需通过添加额外的机制检验)时,倾向于使⽤第⼆种修复⽅式。

中奖名单公布

在公布中奖名单之前,要提醒各位参与抽奖的朋友

一定要看清楚抽奖条件哦

另外,不要刷票!!!

活动一中奖名单:

一等奖:

二等奖:

三等奖:

活动二中奖名单:

小编说了中奖率很高!!

错过了是不是很遗憾!!

往期精彩回顾

为什么要学习TypeScript

一种通过云配置处理应用权限弹框的方案

360Stack裸金属服务器部署实践

360技术公众号

技术干货|一手资讯|精彩活动

扫码关注我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值