[英]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
,以跟蹤對open
或pipe
函數的調用。 另外,最好是grep您的代碼庫,以用於通常打開描述符的函數,例如openfile
, socket
, pipe
, popen
。
另外,您應該知道,失敗的功能並不總是邪惡的根源。 描述符可能會被進程中的其他進程或函數吞噬。
如果您使用的是Linux,還可以查看/proc
文件夾,以確保您的進程實際上吃了很多fd
。 也許您的系統中存在另一個進程,該進程由您的應用程序啟動,並導致fd泄漏。
最后,從您顯示的代碼中,我可以得出結論,泄漏源只能是active_orders
函數。 如果它從serve下載json
數據,則應打開套接字連接。 錯誤消息指向管道的事實很奇怪,也許是通過popen
或system
功能實現的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.