如何使用 numactl 运行服务

如何使用 numactl 运行服务

我需要做这样的事情来运行 MongoDB

$numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf &

我应该更改什么才能使用上述选项运行 mongo 守护进程?

答案1

这取决于您如何管理您的服务。

使用 daemontools 系列服务管理器,仅此而已。

您当前的run程序本质上将归结为

#!/bin/nosh
chdir /
setuidgid mongodb
蒙戈德

这实际上是非常基本的 MongoDBrun程序,包含在常规服务包中我的小吃套房,它不使用 shell 作为脚本解释器。run用于 daemontools 管理的服务的shell 解释脚本,例如contegix 使用的那个或者河津义明的一个可能看起来更复杂,但最终都有一个exec setuidgid mongodb mongod命令某处,即使它隐藏在 shell 变量扩展后面。

对于 daemontools 系列服务管理器,run此类程序本质上是简单的链加载命令序列。该numactl程序也是一个链式加载命令,它修改其自身进程的设置,然后链接到其命令行上指定的程序。它非常适合 daemontools 工具,例如setuidgid

所以你只需添加numactl到那里的链中,这将是

#!/bin/nosh
chdir /
numactl --interleave=全部 --
setuidgid mongodb
蒙戈德
在 nosh 脚本中或
执行\
numactl --interleave=全部 -- \
setuidgid mongodb \
蒙戈德
在 shell 脚本中。(在 shell 脚本中,您可以让脚本尝试自动检测 的存在numactl。只需从下面的 upstart folk 那里窃取该机制即可。)

然后只需重新启动服务(仅限 nosh)

系统控制 condrestart mongod.service
或与

svc -t /服务/mongodb
如果您使用的是旧的常规 daemontools/service目录。

使用 systemd,仅此而已。

在你的mongod.service单元文件中会有一个部分

[服务]
用户=mongodb
ExecStart=/usr/local/bin/mongod $OPTIONS 运行

这就是你会发现的mongodb 附带的 systemd 服务单元,稍微复杂一些,但也复杂不了多少。

因此,您只需按照您的建议进行操作并修改ExecStart设置即可:

ExecStart=/usr/bin/numactl --interleave=all -- /usr/local/bin/mongod $OPTIONS 运行

要么将其放入替换/etc/systemd/service/mongod.service单元文件中以完全覆盖包提供的单元文件,要么保留包提供的单元文件并仅对(例如)中的设置使用覆盖/etc/systemd/service/mongod.service.d/numactl.conf

然后只需从文件中重新加载服务单元即可

systemctl 守护进程重新加载
并重新启动服务

systemctl condrestart mongod.service

有了暴发户,就什么都没有了。

答案位于https://askubuntu.com/questions/293468/AskUbuntu 上的内容现在已经快 2 岁了。同时,numactl能力已被放置进入包提供的 upstart 作业文件

因此,假设您的系统是最新的,应该已经在执行此操作,您甚至不需要

initctl 重启 mongodb

进一步阅读

相关内容