如何确定导致以下堆栈跟踪的数字超时值是什么?
...
File "/usr/lib/python2.7/httplib.py", line 548, in read
s = self._safe_read(self.length)
File "/usr/lib/python2.7/httplib.py", line 647, in _safe_read
chunk = self.fp.read(min(amt, MAXAMOUNT))
File "/usr/lib/python2.7/socket.py", line 380, in read
data = self._sock.recv(left)
timeout: timed out
导入我的模块后,socket.getdefaulttimeout()
的结果是None
(请注意,这与产生上述模块的情况不同,因为获得这些模块需要在系统上运行 8 小时的压力)。
我的代码没有设置任何超时值(默认值或其他)AFAICT。我还没有找到任何提示第三方库正在这样做。
显然,系统中的某个地方有一些超时。我想知道数值,以便我可以在接近系统时将其关闭。
这是 ubuntu 12.04 下的 python 2.7。
编辑:
连接是到本地主机(与侦听 127.0.0.1 的 CouchDB 通信),所以 NAT 应该不是问题。超时仅在数据库负载过重时发生,这对我来说意味着只有当数据库正在备份并且无法足够快地响应请求时,这就是为什么我想知道超时是什么,所以我可以跟踪响应时间并在响应时间超过超时的 50% 时限制传入的请求。
不知道更多,我的猜测是 NAT 跟踪由于长时间不活动而过期,不幸的是,在大多数情况下,您将无法发现确切的超时值。解决方法是将某种保持活动状态的数据包引入您的协议(如果有这种可能性)。