【问题标题】:What is dbus-daemon used for by nodejs?nodejs 使用 dbus-daemon 做什么?
【发布时间】:2020-09-26 11:27:32
【问题描述】:

我创建了一个 nodejs 服务器应用程序,它使用了一些模块,如 ssh2、child_process、puppeteer、ws、sqlite,当这个应用程序运行时,我看到一个带有 message+ 作为用户的“dbus-daemon”进程,这使得 CPU 使用率呈对数上升在几天内到 100% 使整个服务器无响应。

有谁知道为什么 nodejs 会使用这个过程? 在应用程序中,我生成了一些通过message 事件相互通信的子进程。这可能是原因吗?因为 dbus 显然是一个消息系统

我的应用程序本身不会占用 CPU,因为我正在使用 PM2 对其进行监控,并且它始终低于 5%。但是由于某种原因,它使这个 dbus 东西消耗了 cpu

【问题讨论】:

  • 嗨,我不擅长这种事情,但出于好奇我发现了这个:dbus.freedesktop.org/doc/dbus-tutorial.html
  • dbus 用于进程间通信。据我所知,导致这种情况的常见问题是进程创建失控:不断创建想要使用 dbus 的新进程。随着 dbus 请求的数量随时间增加,dbus 需要越来越多的 CPU 来处理它们。我想知道您的节点应用程序中是否有某些东西以不受控制的方式创建进程。
  • 我每隔几秒就运行一次fs.open('/proc/' + pid + '/stat') 以获得一些实时统计数据。会不会是这个问题?
  • 之后你会关闭文件吗?
  • 没有,哈哈。但 node.js 不应该自动关闭它吗?

标签: javascript node.js server process dbus


【解决方案1】:

正如 Ouroborus 在问题 cmets 中所说,dbus 用于进程间通信。您最初认为您的应用程序中的某些东西正在触发这些是很可能的。在干净的 linux 环境中运行,例如轻量级专用容器,将排除来自系统的来源;即系统范围的 dbus 守护进程实例。让您的应用及其依赖项进行调查。

根据您使用的 linux 环境,您可以监控 dbus 进程 - 但根据您的问题,我知道您已经检查过了。如果这仅指向您的应用程序,那么我很确定您的一个依赖项/包导致了问题。由于我使用的是较旧的软件包(没有检查现有实例),系统守护程序一次又一次地自动启动,我遇到了类似的问题。

尝试更新您的所有包/依赖项,或者暂时批量删除它们以查找问题制造者。

您还可以通过指定DBUS_SESSION_BUS_ADDRESS variabele(快速搜索您的enviro 的howto)来解决此问题。如果未设置此变量,则进程可能会尝试使用--autolaunch 选项调用dbus-launch 以启动新的会话总线。如果它一直忘记它的开放会话总线,它将继续推出新的。

【讨论】:

    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2013-01-30
    • 2015-03-16
    • 2019-03-14
    • 2012-01-23
    • 2011-01-12
    • 2014-11-22
    • 2018-09-17
    相关资源
    最近更新 更多