作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它相关的知识,希望对你有一定的参考价值。

我正在使用Ubuntu的最新更新。我做了一个systemd服务来在我的服务器启动时运行脚本(Server.exe)(Mono,C#)。这是它的配置:

    [Unit]
    Description=My
    After=network.target

    [Service]
    PIDFile=/home/my/server/bshserver.pid
    WorkingDirectory=/home/my/server
    ExecStart=/home/my/server/start
    User=my
    Group=my
    SyslogIdentifier=My-Server
    StandardOutput=syslog
    Restart=on-failure
    KillSignal=SIGINT

    [Install]
    WantedBy=multi-user.target

“开始”文件:

    #!/bin/sh
    echo Starting MyServer in /home/my/server
    /home/my/server/Server.exe
    exit $?

我是尝试另一个Ubuntu,也失败了

当我正常运行脚本/ home / my / server / start(在我的终端上简单地/ home / my / server / start)时,它正在按预期工作。 Top报告它在2和我之间的5%CPU之间使用,这是正常的。但是当我开始服务启动时,htop说它总是使用至少100%的CPU(一个核心)

有什么可以解释CPU使用率的这么大差异?

答案

我看到了几个问题:

  • 要启动mono应用程序,必须使用命令mono运行它。使用which mono查找服务器上安装的mono的完整路径。因为它是你的脚本将在每次运行时报告失败。
  • 您的systemd配置具有OnRestart=on-failure set,它比预期更有效。由于您的脚本将始终失败,systemd将不断尝试重新启动该服务。

更新您的脚本以包括调用mono

#!/bin/sh
echo Starting MyServer in /home/my/server
/user/bin/mono /home/my/server/Server.exe
exit $?

如果您的服务使用ServiceBase,那么使用:

#!/bin/sh
echo Starting MyServer in /home/my/server
/user/bin/mono-service /home/my/server/Server.exe
exit $?
  • 你的脚本可能暗示Server.exe会分叉。将Type=forking添加到您的配置中。
    [Unit]
    Description=My
    After=network.target

    [Service]
    Type=forking
    PIDFile=/home/my/server/bshserver.pid
    WorkingDirectory=/home/my/server
    ExecStart=/home/my/server/start
    User=my
    Group=my
    SyslogIdentifier=My-Server
    StandardOutput=syslog
    Restart=on-failure
    KillSignal=SIGINT

    [Install]
    WantedBy=multi-user.target

以上是关于作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它的主要内容,如果未能解决你的问题,请参考以下文章

阿里云服务器win2008,有时候cpu占用率100% ,查找具体原因的方法

CPU占用100%

配置SSH服务使用证书登录Ubuntu服务器

电脑运行PyCharm时,CPU占用率80%~100%

怎样降低CPU和内存使用率

笔记本重装系统了磁盘占用还是100,家庭组也关闭了,没有用,还有其他