beam.smp 有数百个(1000+)线程运行是正常的吗?

beam.smp 有数百个(1000+)线程运行是正常的吗?

我最近在 Debian 11 服务器上安装了 RabbitMQ,发现绝大多数线程现在都属于同一个进程 - beam.smp。根据我在互联网上找到的信息,这个进程是 Erlang 的运行时或 VM,是 RabbitMQ 的依赖项。 的输出ps表明它是一个具有 1200 个线程的单个进程。

$ ps -e | grep beam.smp | wc -l
1
$ ps -eLF | grep beam.smp | wc -l
1200

CPU 使用率很低,所以这些线程肯定都在休眠。不过,我觉得一个进程有这么多线程很奇怪。

这是正常现象还是配置错误的征兆?或者可能是错误?它似乎不会立即导致任何问题,但它会在以后导致问题吗?

通常我会提供配置文件的内容,但在这种情况下,我找不到负责 beam.smp 的配置文件。

答案1

使用 Erlang 可以轻松实现数千个线程。您可能可以按原样使用该调整,特别是如果资源使用可管理的话。

BEAM 是参考 Erlang VM这就是RabbitMQ建立在。Erlang 具有原生并发性,使用轻量级进程进行消息传递。因此,轻量级 RabbitMQ 文档讨论了 200 万个进程大量并发连接其他资源限制在实践中制约着系统规模的扩大。

在 Linux 上,线程恰好是使运行时运行的实现。这意味着许多任务共享相同的组 ID,并且它们显示为相同的进程 ID(与 Erlang 进程的含义不同)。

在 POSIX 系统上,应用程序中很少出现过多线程。请注意,PID 是计算任务的唯一方法。例如,在 SMP 中,一个多线程 PID 可以超过 100% CPU。

相关内容