簡體   English   中英

OCaml Unix錯誤

[英]OCaml Unix Error

我遇到了不確定如何調試的錯誤。 錯誤是Exception: (Unix.Unix_error "Too many open files" pipe "") 我沒有打開任何文件,只有一個Unix進程打開。 有人對如何調試它有一些提示嗎?

導致錯誤的函數是:

 let rec update_act_odrs ?(sec_to_wait = 0.0) () = 
    try         
      (act_odrs := active_orders ())
      |> fun _ -> Lwt_io.print "active_orders Updated\n"
    with _ ->   
      Lwt_unix.sleep sec_to_wait
      >>= update_act_odrs ~sec_to_wait:(sec_to_wait +. 1.0)

其中active_orders ()是一個從服務器獲取JSON數據的函數。

我建議使用ltrace ,以跟蹤對openpipe函數的調用。 另外,最好是grep您的代碼庫,以用於通常打開描述符的函數,例如openfilesocketpipepopen

另外,您應該知道,失敗的功能並不總是邪惡的根源。 描述符可能會被進程中的其他進程或函數吞噬。

如果您使用的是Linux,還可以查看/proc文件夾,以確保您的進程實際上吃了很多fd 也許您的系統中存在另一個進程,該進程由您的應用程序啟動,並導致fd泄漏。

最后,從您顯示的代碼中,我可以得出結論,泄漏源只能是active_orders函數。 如果它從serve下載json數據,則應打開套接字連接。 錯誤消息指向管道的事實很奇怪,也許是通過popensystem功能實現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM