2012-12-05 153 views
2

我有一個產生60個子進程的perl腳本。我收到「內存不足錯誤」,並且沒有其他額外的錯誤消息知道它的原因。它表示什麼?是因爲我有60個子進程在系統中運行,同時出現內存不足錯誤。在這個過程中我沒有大數組或散列映射,所以不應該有內存問題。子進程只是查詢文件。 Solaris 10是OS。perl內存不足錯誤

  1. 什麼是子進程的最大限制,我可以撥入 Solaris 10?
  2. 內存不足表示什麼?

回答

3

某些系統有64個孩子的限制。我想你找到了一個。收穫完成的產卵更多。

+0

非常感謝您的信息。主要腳本中有waitpid函數,等待60個孩子完成。一旦所有子進程完成,主腳本就會退出。我無法找到任何關於最大兒童限制的文件。你知道任何說64是最大限制的網站? 64個限制還可以針對單個Unix用戶進行更改,還是對所有用戶來說都是常見的?另外我怎樣才能找到一個內存使用的每個子進程和內存分配時,子進程啓動。 – Arav

+0

我以前只是聽說過它的存在。這是我所知道的一切。不過,我不記得它是可調節的。 'ulimit'控制着類似的限制,所以我會去看看。 – ikegami

+0

將子進程減少到30個。仍然出現內存不足錯誤。有一個400個鍵的映射文件名映射到打開文件句柄的散列圖。這個hashmap是一個全局變量。在創建的所有子進程中使用此散列映射來查找文件名並grep該文件。最後,當所有chid進程完成時,將讀取hashmap並關閉文件句柄。這是否會造成任何內存不足問題?這個hashmap可以在所有的子進程中使用打開的文件句柄來進行grepping嗎? – Arav

0

我相信60個流程分支對於任何系統都太過分了。 你確定你需要所有這些嗎?儘管fork()經常用作並行化的同義詞,但應謹慎使用。例如,大多數「慢速任務」都是I/O限制的,可以通過非阻塞異步調用進行並行化(請參閱AnyEventCoro)。 即使是CPU綁定的任務也很棘手:除非您有一臺64核心的SMP機器,否則不要指望60個子進程的速度提高60倍。 另外,下面是Perl併發編程的一個很好的比較圖表:http://blog.64p.org/entries/2009/06/30

+0

非常感謝信息 – Arav