错误:pipe_select_interrupter:OS LINUX上打开的文件太多

时间:2015-07-03 04:47:59

标签: c++ linux boost

在我的代码中,我使用了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;
    };
}

1 个答案:

答案 0 :(得分:1)

  

我使用了ulimit并且看到文件discriptors是300000允许的,我认为它不能不再使用。

ulimit -n获取/设置每个进程的打开文件数限制。您可能正在达到操作系统上打开文件的最大限制。

以下命令可能有助于调查问题:

  • 按所有流程统计所有已打开的文件:lsof | wc -l
  • 检查您的操作系统硬限制:cat /proc/sys/fs/file-max
  • 增加操作系统硬限制,即:echo 800000 > /proc/sys/fs/file-max

注意:您的操作系统上的检查/设置限制可能会有所不同。