我有一个Vagrant CentOS虚拟机,运行时分配了ps.memory = 2048
个RAM。
当我尝试启动puppetserver
服务时:
$ puppet --version
4.4.0
$ sudo puppet resource service puppetserver ensure=running
Error: Could not start Service[puppetserver]: Execution of '/bin/systemctl start puppetserver' returned 1: Job for puppetserver.service failed. See 'systemctl status puppetserver.service' and 'journalctl -xn' for details.
Error: /Service[puppetserver]/ensure: change from stopped to running failed: Could not start Service[puppetserver]: Execution of '/bin/systemctl start puppetserver' returned 1: Job for puppetserver.service failed. See 'systemctl status puppetserver.service' and 'journalctl -xn' for details.
service { 'puppetserver':
ensure => 'stopped',
}
$ journalctl -xn
No journal files were found.
$ systemctl status puppetserver.service
puppetserver.service - puppetserver Service
Loaded: loaded (/usr/lib/systemd/system/puppetserver.service; disabled)
Process: 4708 ExecStartPre=/usr/bin/install --directory --owner=puppet --group=puppet --mode=775 /var/run/puppetlabs/puppetserver (code=exited, status=0/SUCCESS)
Main PID: 4709 (java); : 4710 (bash)
CGroup: /system.slice/puppetserver.service
├─4709 /usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError=kill -9 %p -Djava.security.egd=/...
└─control
├─4710 /bin/bash /opt/puppetlabs/server/apps/puppetserver/ezbake-functions.sh wait_for_app
└─4755 sleep 1
来自JAVA_ARGS
的我的/etc/sysconfig/puppetserver
:
JAVA_ARGS="-Xms1g -Xmx1g -XX:MaxPermSize=1g"
根据要求,puppetserver.service
文件:
$ cat /usr/lib/systemd/system/puppetserver.service
[Unit]
Description=puppetserver Service
After=syslog.target network.target
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/puppetserver
User=puppet
TimeoutStartSec=120
TimeoutStopSec=60
Restart=on-failure
StartLimitBurst=5
PermissionsStartOnly=true
ExecStartPre=/usr/bin/install --directory --owner=puppet --group=puppet --mode=775 /var/run/puppetlabs/puppetserver
ExecStart=/usr/bin/java $JAVA_ARGS \
'-XX:OnOutOfMemoryError=kill -9 %%p' \
-Djava.security.egd=/dev/urandom \
-cp "${INSTALL_DIR}/puppet-server-release.jar" clojure.main \
-m puppetlabs.trapperkeeper.main \
--config "${CONFIG}" \
-b "${BOOTSTRAP_CONFIG}" $@
KillMode=process
ExecStartPost=/bin/bash "${INSTALL_DIR}/ezbake-functions.sh" wait_for_app
SuccessExitStatus=143
StandardOutput=syslog
[Install]
WantedBy=multi-user.target
尝试手动运行ExecStartPost
命令:
$ /usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
RuntimeError: Got 2 failure(s) while initializing: File[/var/log/puppetlabs/puppetserver]: change from 0700 to 0750 failed: failed to set mode 0700 on /var/log/puppetlabs/puppetserver: Operation not permitted - No message available; File[/var/run/puppetlabs/puppetserver]: change from 0775 to 0755 failed: failed to set mode 0775 on /var/run/puppetlabs/puppetserver: Operation not permitted - No message available
所以我再试一次,但是这次我改变了一些目录权限,但是仍然有类似的错误(考虑到我只是改变了模式,这没有意义吗?):
$ sudo chown -R vagrant:vagrant /var/run/puppetlabs/
$ sudo chown -R vagrant:vagrant /var/log/puppetlabs/
$ sudo chmod -R 0755 /var/run/puppetlabs/
$ /usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=1g; support was removed in 8.0
RuntimeError: Got 1 failure(s) while initializing: File[/var/run/puppetlabs/puppetserver]: change from 0775 to 0755 failed: failed to set mode 0775 on /var/run/puppetlabs/puppetserver: Operation not permitted - No message available
use at /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/settings.rb:1007
可能是什么问题?
答案 0 :(得分:2)
您确定它是OnOutOfMemory错误吗?我问,因为我发现最新的PuppetServer包含更新版本的logback,如/ var / log / messages中的此消息所示:
Mar 18 01:56:21 puppetserver java: Exception in thread "main" java.lang.AbstractMethodError: ch.qos.logback.core.net.SyslogAppenderBase.createOutputStream()Lch/qos/logback/core/net/SyslogOutputStream;
Mar 18 01:56:21 puppetserver java: at ch.qos.logback.core.net.SyslogAppenderBase.start(SyslogAppenderBase.java:62)
Mar 18 01:56:21 puppetserver java: at ch.qos.logback.classic.net.SyslogAppender.start(SyslogAppender.java:48)
如果你看到,这将用“core.net.Syslog”替换logback.xml中的“classic.net.Syslog”
sed -i_old -e 's/classic.net.Syslog/core.net.Syslog/' /etc/puppetlabs/puppetserver/logback.xml
如果这不是问题,请发布您的日志文件。
答案 1 :(得分:2)
您已将日志提供为
OpenJDK 64位服务器VM警告:忽略选项MaxPermSize = 1g; 支持已在8.0中删除
所以,很明显你使用的是jdk 8来移除permgen空间。
永久生成(PermGen)空间已被完全删除,并被一个名为Metaspace
的新空间所取代。删除PermGen的后果是显然会忽略PermSize和MaxPermSize JVM参数,并且永远不会得到java.lang.OutOfMemoryError: PermGen error
。
-XX:MaxPermSize=1g
JAVA_ARGS
移除/etc/sysconfig/puppetserver
部分
醇>
JAVA_ARGS =" -Xms1g -Xmx1g"
所以
你的命令如下所示:
$ /usr/bin/java -Xms1g -Xmx1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
或
$ /usr/bin/java -Xms1g -Xmx1g -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
请尝试这两个命令。我希望两者都能成功运行。为了谨慎起见,我添加了两个。
N.B:无需更改文件权限。在你使用之前保持它们。
否则,如果您不想更改任何内容,可以将java 8
降级为java 7
相关链接:
答案 2 :(得分:1)
@lollercoster,您开始使用以下服务:
sudo puppet resource service puppetserver ensure=running
但你的下一个命令并没有告诉它是哪个用户
/usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
请在运行上述命令之前直接运行whoami:
whoami
/usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
为什么这个命令? 我非常有信心您的问题是权限/用户上下文问题,以下命令会使问题更严重:
$ sudo chown -R vagrant:vagrant /var/run/puppetlabs/
$ sudo chown -R vagrant:vagrant /var/log/puppetlabs/
$ sudo chmod -R 0755 /var/run/puppetlabs/
对于上述情况,您必须在正确的用户上下文中执行sudo以使文件可写,但这取决于其他数据是否可写。所以你可以尝试一下,但我会使用为服务创建的木偶用户
User=puppet
所以你的木偶服务作为用户木偶运行,但你的日志文件是在流浪者用户控制之下,而不是木偶用户可写的。
所以我也会尝试切换回:
$ sudo chown -R puppet /var/run/puppetlabs/
$ sudo chown -R puppet /var/log/puppetlabs/
$ sudo chmod -R 0755 /var/run/puppetlabs/
<强>爪哇强>
另外,我建议你不要乱用JVM堆参数,除非你知道你做了什么。因为自JDK5以来您不需要在Java VM堆上强制执行较低和最大限制。我只会限制上限
-Xmx1g
javaVM将很好地管理堆和实际分配的mem。由于JVM需要更多,它将逐步增加堆并保持所需的大小(不会缩小到较低的值)。因此,您的计算机上将使用更好的RAM。
另请切换到Oracle JVM。我经常遇到与OpenJDK的安全性和兼容性问题。所以我的第一个测试是在最新所需的Oracle JDK上运行它。在您的情况下Oracle JDK8。 但请先尝试我之前提到的许可事项。
祝你好运,请让我更新。答案 3 :(得分:0)
我以前见过这种行为。 不要尝试以root身份手动运行命令,因为您将搞乱权限。而是使用journalctl -xe
仔细阅读日志,并尝试了解服务失败的原因。在我的情况下,我无法启动puppetserver
服务,因为已经有一个私钥,但还没有公共证书。
ls /etc/puppetlabs/puppet/ssl/certs/`hostname -f`.pem
ls /etc/puppetlabs/puppet/ssl/private_keys/`hostname -f`.pem
如果其中一个没有另一个,则该服务将无法启动。您将在日志文件中看到类似的内容:
Exception in thread "main" java.lang.IllegalStateException: Cannot initialize master with partial state; need all files or none.
如果您是第一次尝试安装puppetserver
,那么就无法破坏现有部署,那么您可以删除现有的私钥,puppetserver
将自动生成新的一对。
rm /etc/puppetlabs/puppet/ssl/certs/`hostname -f`.pem
rm /etc/puppetlabs/puppet/ssl/private_keys/`hostname -f`.pem
最后再次尝试启动puppetserver
服务。
service puppetserver start
答案 4 :(得分:0)
/usr/bin/java -Xms1g -Xmx1g -XX:MaxPermSize=1g
Xms和Xms小于MaxPermSize。这对我有用。