我正在使用 xinetd 作为 Firebird 服务器。
有没有办法用负数 nice 启动 fb_inet_server 进程?当我在 xinetd.conf 中输入“-20”时,xinetd 会跳过它。我查看了 xinetd 源代码,发现参数“nice”是无符号整数,因此我无法在那里提供“-20”。:/
有解决方法吗?
我的配置(Debian GNU/Linux 8):
cps = 1500 10
instances = UNLIMITED
per_source = UNLIMITED
flags = NODELAY KEEPALIVE NOLIBWRAP
socket_type = stream
user = firebird
wait = no
disable = no
nice = 1
max_load = 20
rlimit_as = UNLIMITED
rlimit_files = UNLIMITED
rlimit_cpu = UNLIMITED
rlimit_data = UNLIMITED
rlimit_rss = UNLIMITED
rlimit_stack = UNLIMITED
server = /opt/firebird/bin/fb_inet_server
答案1
xinetd.conf声称它依赖于很好(3)其中又指出:
系统将强制规定最大 nice 值为 2*{NZERO}-1,最小 nice 值为 0。请求高于或低于这些限制的值将导致 nice 值被设置为相应的限制。只有具有适当权限的进程才能降低 nice 值。
因此,无论您何时提供负值,结果始终为正值。有效 nice 值可能是无符号的,但获取它的计算将支持减法。您可以对无符号值执行减法,结果将始终 >= 0。
此外,降低正在运行的应用程序的 nice 值需要适当的权限。
答案2
我从朋友那里得到了一个解决方法 - 但在互联网上找不到它所以我在这里发布它。
要在新的 fb_inet_server 进程上自动设置 nice -20:
- 关闭数据库
- 停止 xinetd
nice = 0
在 firebird xinetd 配置中设置(/etc/xinetd.d/firebird
)renice -n -20
在 xinetd 进程上执行- 让您的数据库在线
每个新的 fb_inet_server 进程都是 xinetd 的一个子进程,它继承了 xinetd 的优点。