SonarQube 启动失败

SonarQube 启动失败

我在 CentOS 7 上安装了 SonarQube 版本 7.9.1,并将服务设置为以非 root 用户启动。我的vm.max_map_count设置为 262144。

sysctl vm.max_map_count
vm.max_map_count = 262144

由于我的 SonarQube 版本,我将 JDK 设置Wrapper.conf

wrapper.java.command=/usr/lib/jvm/java-11-openjdk/bin/java

我的sonar.log是:

--> Wrapper Started as Daemon
Launching a JVM...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
  Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

2019.07.29 13:31:51 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2019.07.29 13:31:51 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2019.07.29 13:31:51 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch
2019.07.29 13:31:51 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2019.07.29 13:31:51 INFO  app[][o.e.p.PluginsService] no modules loaded
2019.07.29 13:31:51 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
2019.07.29 13:31:56 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
2019.07.29 13:31:56 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
2019.07.29 13:31:56 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
<-- Wrapper Stopped

我的 es.log 是:

2019.07.29 13:31:53 INFO  es[][o.e.e.NodeEnvironment] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [31.1gb], net total_space [49.9gb], types [rootfs]
2019.07.29 13:31:53 INFO  es[][o.e.e.NodeEnvironment] heap size [494.9mb], compressed ordinary object pointers [true]
2019.07.29 13:31:53 INFO  es[][o.e.n.Node] node name [sonarqube], node ID [XhVUvjLfTS-JwFuXmFVL4Q]
2019.07.29 13:31:53 INFO  es[][o.e.n.Node] version[6.8.0], pid[60694], build[default/tar/65b6179/2019-05-15T20:06:13.172855Z], OS[Linux/3.10.0-957.21.3.el7.x86_64/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/11.0.4/11.0.4+11-LTS]
2019.07.29 13:31:53 INFO  es[][o.e.n.Node] JVM arguments [-XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/opt/sonarqube/temp, -XX:ErrorFile=../logs/es_hs_err_pid%p.log, -Des.enforce.bootstrap.checks=true, -Xms512m, -Xmx512m, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/opt/sonarqube/elasticsearch, -Des.path.conf=/opt/sonarqube/temp/conf/es, -Des.distribution.flavor=default, -Des.distribution.type=tar]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [analysis-common]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [lang-painless]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [mapper-extras]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [parent-join]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [percolator]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [reindex]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [repository-url]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] loaded module [transport-netty4]
2019.07.29 13:31:53 INFO  es[][o.e.p.PluginsService] no plugins loaded
2019.07.29 13:31:54 WARN  es[][o.e.d.c.s.Settings] [http.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! See the breaking changes documentation for the next major version.
2019.07.29 13:31:55 INFO  es[][o.e.d.DiscoveryModule] using discovery type [zen] and host providers [settings]
2019.07.29 13:31:55 INFO  es[][o.e.n.Node] initialized
2019.07.29 13:31:55 INFO  es[][o.e.n.Node] starting ...
2019.07.29 13:31:56 INFO  es[][o.e.t.TransportService] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2019.07.29 13:31:56 INFO  es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks
2019.07.29 13:31:56 ERROR es[][o.e.b.Bootstrap] node validation exception
[1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
2019.07.29 13:31:56 INFO  es[][o.e.n.Node] stopping ...
2019.07.29 13:31:56 INFO  es[][o.e.n.Node] stopped
2019.07.29 13:31:56 INFO  es[][o.e.n.Node] closing ...
2019.07.29 13:31:56 INFO  es[][o.e.n.Node] closed

答案1

要永久应用这些配置,请编辑/etc/sysctl.d/99-sonarqube.conf/etc/sysctl.conf添加:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048`

vm.max_map_count大于或等于 262144 fs.file-max大于或等于 65536 运行 SonarQube 的用户至少可以打开65536 file descriptors 运行 SonarQube 的用户至少可以打开2048 threads

或者如果您想应用这些设置current session,只需在终端中输入每个命令:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048

希望这可以帮助!

答案2

我昨天遇到了完全相同的错误,并通过遵循一小段资源链解决了它。

  1. 通过谷歌搜索max file descriptors [4096]发现的问题这篇置顶帖子。解决方案强调了这样一个事实:不是vm.max_map_count变量没有被正确拾取,而是和LimitNOFILELimitNPROC这篇文章指出解决方案是更新“单元文件”中的变量。
  2. 在 Google 上搜索了评论者提到的“单元文件”、systemd 和更新的文档后,我在这里找到了在“使用 SystemD 在 Linux 上将 SonarQube 作为服务运行”部分中。
  3. 通过 SystemD 创建和运行 SonarQube,可以确保max file descriptor变量确实被设置。遵循这些确切的指示可以让 SonarQube 顺利启动。

相关内容