Linux系统下sonarqube启动失败的解决办法

1. 先看报错,然后再说排错思路和我的解决办法

我的sonarqube安装没有问题,系统设置也没有问题,启动的时候,通过es.log和sonar.log查看,发现并没有报错,但是运行不起来,很苦恼

es日志如下

[sonar@localhost sonarqube]$ tail logs/es.log 
2019.07.09 23:02:02 INFO  es[][o.e.n.Node] initialized
2019.07.09 23:02:02 INFO  es[][o.e.n.Node] starting ...
2019.07.09 23:02:02 INFO  es[][o.e.t.TransportService] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2019.07.09 23:02:06 INFO  es[][o.e.c.s.ClusterService] new_master {sonarqube}{z2IOk9LNTruhm9qD_lsU7g}{oDU2Uf7TRkWK6K0N9xMnAg}{127.0.0.1}{127.0.0.1:9001}{rack_id=sonarqube}, reason: zen-disco-elected-as-master ([0] nodes joined)
2019.07.09 23:02:06 INFO  es[][o.e.n.Node] started
2019.07.09 23:02:06 INFO  es[][o.e.g.GatewayService] recovered [0] indices into cluster_state
2019.07.09 23:02:10 INFO  es[][o.e.n.Node] stopping ...
2019.07.09 23:02:10 INFO  es[][o.e.n.Node] stopped
2019.07.09 23:02:10 INFO  es[][o.e.n.Node] closing ...
2019.07.09 23:02:10 INFO  es[][o.e.n.Node] closed

web.log日志如下

[sonar@localhost sonarqube]$ tail logs/web.log 
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
        at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
        at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
        ... 34 common frames omitted

sonar.log如下

[sonar@localhost sonarqube]$ tail logs/sonar.log 
2019.07.09 23:01:56 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2019.07.09 23:01:57 INFO  app[][o.e.p.PluginsService] no modules loaded
2019.07.09 23:01:57 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019.07.09 23:02:06 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
2019.07.09 23:02:06 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/usr/local/sonarqube]: /usr/local/java/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/usr/local/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/usr/local/sonarqube/lib/jdbc/mysql/mysql-connector-java-5.1.42.jar org.sonar.server.app.WebServer /usr/local/sonarqube/temp/sq-process408382893843972863properties
2019.07.09 23:02:10 INFO  app[][o.s.a.SchedulerImpl] Process [web] is stopped
2019.07.09 23:02:10 INFO  app[][o.s.a.SchedulerImpl] Process [es] is stopped
2019.07.09 23:02:10 WARN  app[][o.s.a.p.AbstractProcessMonitor] Process exited with exit value [es]: 143
2019.07.09 23:02:10 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
<-- Wrapper Stopped

2. 排错思路

1)注意mysql和jdk的版本要求

这方面可以去官网查看,比较清晰,我是在centos7上安装,要求如下

Linux系统下sonarqube启动失败的解决办法_第1张图片
Linux系统下sonarqube启动失败的解决办法_第2张图片
Linux系统下sonarqube启动失败的解决办法_第3张图片
要安装对版本,比如mysql要求5.6或者5.7 你要是使用8.0 就会失败,亲测 哈哈

2)系统参数设置

这个可以参考sonar官网,我安装的是6.7 要求在这里: https://docs.sonarqube.org/display/SONARQUBE67/Requirements

设置系统参数的命令

sysctl -w fs.file-max=65536 #不执行了 我的是centos7 默认的值都比这个大
sysctl -w vm.max_map_count=262144
ulimit -n 65536
ulimit -u 2048

3)sonarqube的安装目录属主属组要改为非root用户,并用非root用户启动

笔者的操作如下

[root@localhost ~]# chmod -R sonar:sonar /usr/local/sonarqube/
[root@localhost ~]# su sonar 
[sonar@localhost root]$ cd /usr/local/sonarqube/bin/linux-x86-64/
[sonar@localhost linux-x86-64]$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.
[sonar@localhost sonarqube]$ ss -ntpl | grep 9000
LISTEN     0      25       ::ffff:192.168.20.126:9000                    :::*                   users:(("java",pid=4813,fd=116))

4)查看ip是否对应,这个不容易发现

我在数据库的授权命令如下(我的ip是20.126)

mysql> grant all on sonar.* to 'sonar'@'192.168.20.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

但是我在修改sonarqube的配置文件的时候大意了,以为localhost是本机,就没有修改,直接取消注释

 26 sonar.jdbc.url=jdbc:mysql://192.168.20.126:3306/sonar?useUnicode=true&characterEncoding=    utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

其实是不一样的,个人感觉localhost对应的是127.0.0.1 ,而不是我授权的192的ip,所以出现了错误,我的错误是因为这个,改过来之后可以正常启动

5)加大内存

这个错误很隐蔽,一般发现不了,最显著的特点就是es启动正常,也没有报错,但是自己停止了,如下

[sonar@localhost root]$ tail /usr/local/sonarqube/logs/es.log 
2019.07.10 20:09:45 INFO  es[][o.e.n.Node] starting ...
2019.07.10 20:09:45 INFO  es[][o.e.t.TransportService] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2019.07.10 20:09:48 INFO  es[][o.e.c.s.ClusterService] new_master {sonarqube}{z2IOk9LNTruhm9qD_lsU7g}{GkwfZwNvS82vZ3Z4GbMxHA}{127.0.0.1}{127.0.0.1:9001}{rack_id=sonarqube}, reason: zen-disco-elected-as-master ([0] nodes joined)
2019.07.10 20:09:48 INFO  es[][o.e.n.Node] started
2019.07.10 20:09:49 INFO  es[][o.e.g.GatewayService] recovered [8] indices into cluster_state
2019.07.10 20:09:50 INFO  es[][o.e.c.r.a.AllocationService] Cluster health status changed from [RED] to [GREEN] (reason: [shards started [[components][1], [metadatas][0]] ...]).
2019.07.10 20:09:53 INFO  es[][o.e.n.Node] stopping ...
2019.07.10 20:09:54 INFO  es[][o.e.n.Node] stopped
2019.07.10 20:09:54 INFO  es[][o.e.n.Node] closing ...
2019.07.10 20:09:54 INFO  es[][o.e.n.Node] closed

内存≥3G就没有问题,2G就不行

你可能感兴趣的:(linux)