2

我有一个产生 60 个子进程的 perl 脚本。我收到“内存不足错误”并且没有其他额外的错误消息知道它的原因。它表示什么?是不是因为我有 60 个子进程同时在系统中运行,所以出现内存不足错误。我在这个过程中没有大数组或哈希映射,所以不应该有内存问题。子进程只是 greps 文件。Solaris 10 是操作系统。

  1. 我可以在 Solaris 10 中分叉的子进程的最大限制是多少?
  2. 内存不足是什么意思?
4

3 回答 3

3

有些系统有 64 个孩子的限制。我猜你找到了一个。收获那些已经完成的产卵。

于 2012-12-05T03:33:56.040 回答
0

我相信 60 个进程分叉对于任何系统来说都太多了。你确定你需要所有这些吗?尽管fork()经常用作并行化的同义词,但应谨慎使用。例如,大多数“慢任务”都是 I/O 绑定的,可以通过非阻塞异步调用并行化(参见AnyEventCoro)。即使是 CPU 密集型任务也很棘手:除非您拥有 64 核SMP机器,否则不要期望 60 个子进程的速度会提高 60 倍。此外,这里是 Perl 并发编程的一个很好的比较图表:http: //blog.64p.org/entries/2009/06/30

于 2012-12-05T13:59:39.070 回答
0

您可以使用诸如Parallel::ForkManager之类的库来将同时处理的进程数保持在一定范围内。

于 2012-12-05T16:36:16.157 回答