监督问题的解决方法是: “编译支持> 1024文件描述符的Python”
https://github.com/Supervisor/supervisor/issues/26
有人可以告诉我完成此操作所需的更改吗?我已经提取了python 2.7.2源代码并准备好了。
运行centos 5.6,如果重要的话。
感谢。
更新:ulimit -n已设置为65535.这是我在启动supervisord时遇到的完整错误:
追踪(最近一次通话): 文件“/ usr / local / bin / supervisord”,第8行,in load_entry_point('supervisor == 3.0a10','console_scripts','supervisord')() 文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第372行,主要 去(选项) 文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第382行,在go d.main()中 文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第95行,主要 self.run()
的范围
文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第112行,在运行中 self.runforever()
在runforever中输入文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第230行 r,w,x = self.options.select(r,w,x,timeout)
文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/options.py”,第1113行,在select中 return select.select(r,w,x,timeout) ValueError:filedescriptor超出select()
答案 0 :(得分:3)
这实际上是基础select(2)
系统调用的限制。
从手册页:
An fd_set is a fixed size buffer. Executing FD_CLR() or FD_SET() with a value of fd
that is negative or is equal to or larger than FD_SETSIZE will result in
undefined behavior.
标准FD_SETSIZE为1024。
/usr/include/linux/posix_types.h:#define __FD_SETSIZE 1024
所以这不是Python问题。 poll(2)
和epoll(2)
系统调用具有更大的限制。你真正需要做的是使用select.epoll
对象(仍然在select
模块中)而不是`select。