在我的代码中,我使用了boost库,并在第一次运行boost :: thread时发生错误并发生:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'what():
pipe_select_interrupter: Too many open files.
我使用ulimit
并且看到文件discriptors是300000允许的,我认为它不能使用。
代码抛出错误:
CCohConnection *conn = new CCohConnection(this,CCohStack::GetIoService());
构造函数定义:
CCohConnection::CCohConnection(ICohClient *pClient,boost::asio::io_service &io_service):
m_pClient(pClient),m_oIoService(io_service),m_socket(io_service),m_resolver(io_service),m_timer(io_service)
{
printf("gouzao\n");
}
我的程序在这个构造函数中分解了,这是ioservice定义:
namespace coh{
class CCohStack
{
public:
static void Start();
static void Stop();
static boost::asio::io_service & GetIoService(){return sm_oIoService;}
private:
static boost::asio::io_service sm_oIoService;
static boost::asio::io_service::work *sm_oWork;
static boost::thread m_thread;
};
}
答案 0 :(得分:1)
我使用了ulimit并且看到文件discriptors是300000允许的,我认为它不能不再使用。
ulimit -n
获取/设置每个进程的打开文件数限制。您可能正在达到操作系统上打开文件的最大限制。
以下命令可能有助于调查问题:
lsof | wc -l
cat /proc/sys/fs/file-max
echo 800000 > /proc/sys/fs/file-max
注意:您的操作系统上的检查/设置限制可能会有所不同。