我有一个 python 脚本,它在无限循环中工作,该脚本做几件事并使用类中的几个方法,将信息记录到我拥有的几个记录器中,并与 SQS Amazon 队列一起使用。像这样:
A = ClassA()
B = ClassB()
C = ClassC()
while True:
# pull messages from SQS
messages = sqs.pull_messages()
logger.info('Pulled messages from SQS')
A.do_something(messages)
logger.info('Doing something on class A')
# download something from the internet
data = B.download_something()
logger.info('Downloaded something')
C.insert_to_database()
该脚本可以正常工作几天而不会耗尽内存或因为回溯而退出脚本,我在我的 Linux 机器中像这样启动我的脚本:
python script.py &
几天后,我可以回到盒子,发现脚本仍在运行,但记录器记录了 1 天前的数据,这不是常见的模式,有时脚本在几小时后停止工作,有时在几天后停止工作,但从未得到杀了。
所以我的问题是,有没有一种方法可以调用终止进程 kill pid 并查看发生了什么?启动事后调试器会告诉我脚本在做什么,或者在我杀死它之前它在哪一行?有什么方法可以解决这个问题吗?
请您参考如下方法:
strace 将为您提供系统调用及其响应的 View 。它的级别可能比您喜欢的要低,但它可以让您查看网络调用是否失败、读取是否超时或发生了什么。
在标准的亚马逊 linux 镜像上,strace 可以通过“yum install strace”获得
查找程序“mycommand”
# find the pid
ps -ef | grep [m]ycommand
# use the pid from the previous command
strace -p $thepid
