使用负数 nice 启动 xinetd 进程

使用负数 nice 启动 xinetd 进程

我正在使用 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:

  1. 关闭数据库
  2. 停止 xinetd
  3. nice = 0在 firebird xinetd 配置中设置( /etc/xinetd.d/firebird
  4. renice -n -20在 xinetd 进程上执行
  5. 让您的数据库在线

每个新的 fb_inet_server 进程都是 xinetd 的一个子进程,它继承了 xinetd 的优点。

相关内容