2015-07-03 73 views
0

在我的代碼,我用升壓庫,並得到了錯誤,並在升壓::線程第一次運行時:錯誤:pipe_select_interrupter:打開的文件太多,在OS LINUX

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

我們需要更多代碼([SSCCE](http://www.sscce.org/))。代碼並未顯示實際管理的資源生命週期。 – sehe

回答

1

I used ulimit and see the file discriptors is 300000 allowed,I think it can't be out of use.

ulimit -n獲取/設置每個進程的打開文件數限制。您可能正在達到操作系統上打開文件的最大限制。

下面的命令可以與問題的調查幫助:

  • 計數的所有所有進程打開的文件:lsof | wc -l
  • 檢查你的操作系統硬限制:cat /proc/sys/fs/file-max
  • 增加OS硬限制,即:echo 800000 > /proc/sys/fs/file-max

注意:檢查/設置限制可能會在您的操作系統上有所不同。

+0

嗨,謝謝你的回答,但它不起作用。其實我不認爲這是真正的打開文件的限制的錯誤。但代碼太多了,我不知道要顯示給你什麼。使用'boost :: asio :: ioservice'有一些限制嗎? – liuhongxuan

+0

這麼短的帖子裏有這麼多好資料,謝謝。 – kecer

相關問題