野飞作为systemd服务

6
我想将WildFly-Domain作为CentOS7中的systemd服务。 在root用户下运行正常,但是当我以“wildfly”用户身份启动它一段时间后,会显示以下错误信息:

java.lang.OutOfMemoryError: 无法创建新的本机线程

并停止工作。即使停止服务也不起作用。

我尝试更改堆内存大小等,但问题在于用户! 我该怎么解决这个问题?
服务文件位于WildFly8 / bin / init.d / wildfly-init-redhat.sh中。 我尝试在服务脚本顶部使用“ulimit -n”,但没有任何变化! 我的服务器有256GB的RAM和64核心CPU可供使用,但是……

请在您的问题中包含您遇到问题的 systemd .service 文件。 - Mark Stosberg
你是什么意思?我应该在哪里添加什么? - Mehrdad Islamkhah
1
你说你正在使用 systemd 服务。因此,在 /etc/systemd/system/ 目录下应该有一个扩展名为 .service 的文件。如果你没有使用 .service 文件,那么你就没有使用 systemd。如果你确实在使用,请将该 .service 文件的内容粘贴到你的问题中。 - Mark Stosberg
我最初在 /etc/init.d/ 中完成了它,但现在我已将其更改为 systemd。现在我有一个 systemd 的 Wildfly 服务。当我以 root 用户身份运行它时,没有问题,但当我使用 Wildfly 用户启动它时,它能够工作,但是在5分钟后就会崩溃,如我所说,我该如何更改 Wildfly 用户的限制? - Mehrdad Islamkhah
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/ - Mehrdad Islamkhah
显示剩余2条评论
1个回答

14

单元的正确位置是:

/etc/systemd/system/wildfly.service

这个最小化的版本是可以的

[Unit]
Description=WildFly application server
Wants=network-online.target 
After=network-online.target

[Service]
Type=simple
User=web
Group=web
ExecStart=/opt/wildfly-10.1.0.Final/bin/domain.sh
Restart=always
RestartSec=20

[Install]
WantedBy=multi-user.target

您只需要编辑ExecStart字段以匹配您的路径。

使用以下命令创建名为web的用户:

useradd web

也可以由root执行:

chown -R web:web /opt/wildfly-10.1.0.Final/

systemctl start wildfly
systemctl enable wildfly

如果你遇到OOMs,请检查你的限制。
在systemd单元的[Service]部分,例如:
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000

或者 /etc/security/limits.d/ /etc/security/limits.conf

2
network.target 可能太早了(在快速机器上使用 RHEL7 时出现问题);使用 Wants=network-online.target After=network-online.target,以便在操作系统端正确配置接口;取自此处:https://unix.stackexchange.com/questions/126009/cause-a-script-to-execute-after-networking-has-started/126146#126146 - P Marecki
对于网络服务器来说,这应该不会有影响,但我猜无论如何都不会有害。因此,我编辑了我的帖子,谢谢。 - Oleg Gritsak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接