如何找到Python守护进程崩溃的原因?
我用一个叫做 python-daemon 的库写了一个后台程序(daemon)。
这个后台程序似乎会定期停止工作(或者被杀掉),但停止的时间不固定,有时候是一天,有时候是几个月。
为了找出后台程序停止工作的原因,我尝试捕捉异常,把它们记录到一个文件里,然后发邮件给我。我的脚本中后台程序的部分大致是这样的:
import daemon
context = daemon.DaemonContext(
working_directory='/foo/',
pidfile=lockfile.FileLock('/foo/foo.pid')
)
try:
with context:
do_stuff()
except Exception, e:
log_exception_to_file(e)
mail_exeption_to_me(e)
我已经记录并收到了一些异常的邮件,所以我知道代码大体上是能工作的。
但在大多数情况下,我什么也没收到,这时一个监控脚本会提醒我后台程序不再运行。有没有什么办法可以找出或者追踪后台程序为什么会停止工作或者被杀掉呢?
1 个回答
2
在你发送邮件的时候,记得查看一下内存使用情况。可能会有内存泄漏的问题,这样的话程序就会在用完所有可用的内存后崩溃。你可以使用resource
模块来查看应用程序的最大常驻集大小(maxrss)、共享内存(ixrss)、未共享的内存(idrss)和其他一些内存信息。如果你每隔五分钟记录一次这些数据,就能很明显地看出是否存在内存泄漏的问题。