我最近在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的配置文件。
发布于 2022-03-20 20:21:59
有了Erlang,成千上万的线程就容易了。很可能您可以按原样使用调优,特别是在资源使用是可管理的情况下。
光束是参考的Erlang,这是RabbitMQ的基础。Erlang具有本地并发性,轻量级进程执行消息传递。因此,轻量级RabbitMQ文档讨论了非常多的并发连接的200万个进程。其他资源限制限制了系统在实践中能够达到多大。
在Linux上,线程恰好是使运行时正常运行的实现。这意味着许多任务共享相同的组ID,它们显示为相同的进程ID (与Erlang进程的含义不同)。
在POSIX系统上,许多线程在应用程序中并不常见。了解PID是计数任务的唯一方法。例如,使用SMP,一个多线程PID可以超过100%的CPU.
https://serverfault.com/questions/1096608
复制相似问题