MongoDB仅使用一个线程

问题描述 投票:0回答:1

带有[email protected]的MacOS(使用brew安装)

TLDR:MongoDB仅作为一个进程运行,似乎没有利用其他7个可用的CPU内核。

我正在使用PM2运行一个简单的NodeJS应用程序,利用了我所有的8个CPU内核。

[使用Apache Benchmark,我尝试对应用程序进行压力测试以检索数据。我要访问的端点从MongoDB数据库中检索数据。 (仅读取,不执行写入操作)。

在压力测试期间,我得到了以下结果:

  1. 有8个活动的NodeJS进程
  2. 只有1个活动的MongoDB进程
  3. CPU使用率表明MongoDB是瓶颈。如何确保MongoDB利用更多内核?

从顶部截屏:8 node processes, only 1 mongodb

为什么MongoDB仅使用1个进程/核心?

我可以通过将其配置为使用多个进程/核心来提高性能吗?

一些其他信息,serverStatus()在压力测试期间运行:connections

mongodb
1个回答
0
投票

[MongoDB(作为any database)与单个进程配合使用,以确保一致性,它使用锁定和其他concurrency control措施来防止多个客户端同时修改同一数据。

MongoDB性能

在某些情况下,应用程序与数据库之间的连接数量可能使服务器处理请求的能力不堪重负。 serverStatus文档中的以下字段可以提供洞察力:

  • connections是以下两个字段的容器:
    • connections.current当前连接到数据库实例的客户端总数。
    • connections.available可用于新客户端的未使用的连接总数。

如果有大量并发应用程序请求,则数据库可能难以满足需求。如果是这种情况,那么您将需要增加部署的容量。

对于大量读取的应用程序,增加副本集的大小并将读取操作分配给辅助成员

对于繁重的应用程序,请部署分片并将一个或多个分片添加到分片群集中,以在mongod实例之间分配负载。

https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/#number-of-connections

© www.soinside.com 2019 - 2024. All rights reserved.