ZSH不断出现`zsh: fork failed:`错误

13
在过去几周中(可能是自从我升级到Sierra以来),我在使用ZSH的时遇到了一个奇怪的问题。

基本上,在我正常的工作流程中的间歇性点,命令会停止正常工作,并显示错误:

_run-with-bundler:5: fork failed: resource temporarily unavailable
zsh: fork failed: resource temporarily unavailable

有人知道这是为什么吗?我该如何解决?


你是否检查过这个问题:https://github.com/robbyrussell/oh-my-zsh/issues/1509? - gregory
2个回答

3

我遇到了这个问题将近一周,每次都不得不重启电脑,真的很烦人。

在我的情况下,是一个cron进程。我发现这个进程每分钟运行一次,似乎占用了大量内存。针对我的情况解决问题的步骤如下:

  1. 运行crontab -e并减少cron进程运行的频率。
  2. 运行Activity Monitor
  3. 如果Activity Monitor图标上下跳动并且无法打开,请关闭一些程序。在我的情况下,我关闭了Evernote和Slack。这样释放了一些内存,我想Activity Monitor就打开了。
  4. 点击Activity Monitor中的Process Name选项卡。
  5. 向下滚动,你可能会看到一个不断重复的进程。(在这里,我看到了很多cron
  6. 你需要停止所有这些进程。选择所有叛逆进程,在左上角点击x以退出它们所有。
  7. 这解决了我的问题。

接下来几天我会观察一下。如果有任何变化,我会更新的。否则,就意味着它起作用了。

祝你好运!


那正是我的情况。我刚刚更新了macOS,所以我认为这与此有关。但实际上,这是一个vscode扩展,在我打开项目后递归运行“make”。我没有意识到这一点,因为编辑器窗口正常工作。 - Samir Aguiar

2
这个错误可能反映了你的工作流程存在内存泄漏问题。我最近在使用自动化脚本时遇到了此问题,并发现在程序失败并显示此消息前,内存使用率已增加到约100%。
通常可以通过在Mac OS上运行Activity Monitor应用程序并导航到内存选项卡来检查是否存在内存泄漏问题。还有许多从zsh终端监视内存的方法,例如您可以使用$ ps -eLf | wc -l命令打印出进程数量,或使用free -m检查可用内存。
如果是内存问题,则最好的解决方法是重新编写您的工作流程以提高内存效率。另一种解决方法可能是增加计算机可以运行的进程限制,例如通过在etc/profile文件中添加以下内容:
if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
fi
参考资料:
注意:本文档仅供参考,具体操作请谨慎。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接