在 Linux 上使用 systemd 启动进程:使用 "su root -c" 的不同行为
Starting a process using systemd on Linux: different behaviour using "su root -c"
我们在 Linux Debian 服务器上有一个使用 Mono/Owin 的 SignalR 推送服务器。
我们进行了负载测试,根据在 systemd 上启动推送的方式,我们得到了不同的行为
工作:
ExecStart=/bin/su root -c '/usr/bin/mono --server mydaemon.exe -l:/var/run/mydaemon.pid'
大约 1k 个连接后挂起:
ExecStart=/usr/bin/mono --server mydaemon.exe -l:/var/run/mydaemon.pid
我们可能随时重现不同的行为:在第二种情况下,测试客户端停留在 SignalR 协商调用中,没有收到任何答复。
对于这两种情况,我们还为 Mono 激活了环境变量 "max thread" 的导出。
所以问题是,在这两种情况下,资源系统 usage/avaliability 可能有什么不同?
在systemd服务定义中,可以指定打开文件数的限制,所以如果加上一行:
LimitNOFILE=65536
在服务定义文件的 [Service]
部分,它应该将限制设置为该值,而不是通过 systemd 作为 1024
.
的默认值
systemd-system.conf file defines the parameters for defaults for the limits (e.g. DefaultLimitNOFILE
), and the systemd.exec 手册页定义了可用于设置各种限制覆盖的参数。
我们在 Linux Debian 服务器上有一个使用 Mono/Owin 的 SignalR 推送服务器。
我们进行了负载测试,根据在 systemd 上启动推送的方式,我们得到了不同的行为
工作: ExecStart=/bin/su root -c '/usr/bin/mono --server mydaemon.exe -l:/var/run/mydaemon.pid'
大约 1k 个连接后挂起: ExecStart=/usr/bin/mono --server mydaemon.exe -l:/var/run/mydaemon.pid
我们可能随时重现不同的行为:在第二种情况下,测试客户端停留在 SignalR 协商调用中,没有收到任何答复。 对于这两种情况,我们还为 Mono 激活了环境变量 "max thread" 的导出。
所以问题是,在这两种情况下,资源系统 usage/avaliability 可能有什么不同?
在systemd服务定义中,可以指定打开文件数的限制,所以如果加上一行:
LimitNOFILE=65536
在服务定义文件的 [Service]
部分,它应该将限制设置为该值,而不是通过 systemd 作为 1024
.
systemd-system.conf file defines the parameters for defaults for the limits (e.g. DefaultLimitNOFILE
), and the systemd.exec 手册页定义了可用于设置各种限制覆盖的参数。