我目前正在尝试以下链接中的 D-Bus 示例代码:
https://linoxy.com/how-tos/d-bus-ipc-mechanism-linux/
有效。
然后,我对上面的示例代码进行了耗尽测试,即将 DBus 消息快速广播给其他 DBus 用户,这些用户处理收到的消息的速度不如发送者发送的消息快,D-Bus 守护进程的虚拟内存使用量开始增长,这是预料之中的,因为 DBus 守护进程的传出队列不断积累。
然后我停止了发送方进程,当接收方使用过滤功能传播消息时,D-Bus 守护进程的虚拟内存使用量应该开始减少。然而,即使接收进程完成了所有数据的传播,D-Bus守护进程的虚拟内存使用量也没有减少。
我针对以下三种情况尝试了上述测试:
发送方应用程序通过 DBus 将消息广播到所有接收方应用程序。
发送方应用程序将方法调用消息发送到特定的接收方应用程序,而不请求回复
发送方应用程序将方法调用消息发送到特定的接收方应用程序,请求接收方应用程序的回复。情况 1 和 2 将使 dbus 守护进程虚拟内存使用量增大,并且如果发送方应用程序终止并且接收方应用程序完成了对来自发送方的所有消息的处理,则其虚拟内存使用量不会减少。
然而,情况 3 不会增加 DBus 守护进程虚拟机的使用量。测试期间虚拟机使用率保持不变。
所以我的问题是,如何使情况 1 和 2 表现得像情况 3 一样?或者,即使 VM 使用量由于 DBus 守护进程中的消息队列而增加,但在接收器应用程序完成传播所有传入消息后,其 VM 使用量应该缩减到其原始状态。
我怀疑 DBus 守护进程应该设置一些配置,以便在接收器应用程序完成处理这些消息后它可以释放这些内存使用量。我花了相当长的时间在 DBus 守护程序配置文件(用于会话总线)中寻找这样的配置,链接如下:
https://dbus.freedesktop.org/doc/dbus-daemon.1.html
但我在上面的页面中找不到任何一个。所以请告诉我如何让 dbus 守护进程在处理消息后释放这些 VM 使用情况?
PS:我用来检查dbus守护进程的VM使用情况的linux命令是:
cat /proc/`pgrep dbus-daemon | awk 'NR==1{print $1}'`/status | grep Vm