对以下内容的更新:
我在不同数据中心的 Debian 虚拟机上的不相关脚本上遇到了类似的问题。
这看起来很像这里描述的问题(就像问这个问题的人一样,我没有在服务器前配置代理)。
与以下描述的主要区别在于,当我附加到挂起的进程时,我看到的是对recvfrom
而不是的调用read
:
$ strace -p 17527
Process 17527 attached - interrupt to quit
recvfrom(3,
Run Code Online (Sandbox Code Playgroud)
然而,Python 并没有任何被代理的印象:
>>> import os; print os.getenv("HTTP_PROXY"), os.getenv("http_proxy")
None, None
Run Code Online (Sandbox Code Playgroud)
所以我还是很难过。可悲的是,链接的问题也没有最终答案。
(我也想知道这个问题是否相关,但 S3 似乎不太可能不尊重Connection: close
标题。)
我有几个 Debian(Wheezy、x86_64)服务器都表现出以下行为:
所有服务器都有一组 cron 作业,其中包括从 S3 中提取数据。这些通常运行良好,但偶尔会ps aux
显示一些小时或几天前开始的作业仍在运行,并且没有完全完成。
通过strace -p <pid>
显示检查它们,在所有情况下,该进程都挂在读取命令上。比如我刚才查的一个进程的输出是:
$ strace -p 12089
Process 12089 attached - interrupt to quit
read(5,
Run Code Online (Sandbox Code Playgroud)
检查打开的文件描述符给了我这个:
$ sudo lsof -i | grep 12089
python 12089 …
Run Code Online (Sandbox Code Playgroud)