Node.js使用的dbus-daemon是什么?

问题描述

我创建了一个nodejs服务器应用程序,该应用程序使用了ssh2,child_process,puppeteer,ws,sqlite等一些模块,当该应用程序运行时,我看到一个带有消息+的“ dbus-daemon”进程,使用户cpu使用率呈对数增长在几天到100%的时间内使整个服务器无响应。

有人知道为什么nodejs会使用此过程吗? 在应用程序中,我生成了一些子进程,这些子进程通过function reducer(state,action) { switch (action.type) { case "DIRECTION_CHANGE": return { ...state,direction: action.payload }; default: return state; } } export default function Page({ direction }) { const [state,dispatch] = useReducer(reducer,{ direction }); useEffect(() => { dispatch({ type: "DIRECTION_CHANGE",payload: direction }); },[direction]); return ( <div> <input type="text" /> {JSON.stringify(state)} </div> ); } 事件相互通信。那可能是原因吗?因为dbus显然是一个消息传递系统

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

解决方法

正如Ouroborus在问题注释中所述,dbus用于进程间通信。您最初的想法是应用程序中的某些东西正在激发这些可能性。在干净的linux环境(例如轻量级专用容器)中运行将排除源于系统;即系统范围的dbus守护程序实例。离开您的应用及其依赖项进行调查。

根据您使用的Linux环境,您可以监视dbus进程-但是从您的问题来看,我知道您已经检查过。如果那仅指向您的应用程序,那么我可以肯定您的依赖项/程序包之一引起了该问题。我遇到了类似的问题,由于我使用的是较旧的程序包(无法检查现有实例),因此一次又一次自动启动系统守护程序。

尝试更新您的所有程序包/依赖项,或者临时批量删除它们以查找造成麻烦的人。

有一个小的更改,您还可以通过指定DBUS_SESSION_BUS_ADDRESS variabele(快速查找有关环境的方法)来解决该问题。如果未设置此变量,则进程可能会尝试使用dbus-launch选项调用--autolaunch来启动新的会话总线。而且,如果它继续跟踪开放会话总线,它将继续推出新的总线。