sbs*_*sbs 5 go ulimit goroutine
在 54 核机器上,我用来os.Exec()生成数百个客户端进程,并使用大量的 goroutine 来管理它们。
有时,但并非总是,我会得到这样的信息:
\n\nruntime: failed to create new OS thread (have 1306 already; errno=11)\nruntime: may need to increase max user processes (ulimit -u)\nfatal error: newosproc\nRun Code Online (Sandbox Code Playgroud)\n\n我的 ulimit 已经相当高了:
\n\n$ ulimit -u\n1828079\nRun Code Online (Sandbox Code Playgroud)\n\n如果我将自己限制在 54 个客户之内,那绝对不会有问题。
\n\n有没有办法可以更优雅地处理这种情况?例如\xc2\xa0不会因为致命错误而崩溃,而只是做更少/延迟的工作?或者提前查询系统并预测我可以做的最大数量的事情(尽管我不想限制核心数量)?
\n\n鉴于我的 ulimit 很大,这个错误是否应该发生?grep -c goroutine致命错误后的堆栈输出仅给出 6087。每个客户端进程(其中肯定少于 2000 个)可能有一些自己的 goroutine,但没什么疯狂的。
编辑:该问题仅发生在高核机器(~60)上。保持其他一切不变,只需将内核数量更改为 30(这是 OpenStack 环境,因此仍在使用相同的底层硬件),就不会发生这些运行时错误。
\n| 归档时间: |
|
| 查看次数: |
12391 次 |
| 最近记录: |