소나큐브 구동 시 vm.max_map_count Error 해결하기
SonarQube(소나큐브)를 설치 후 구동 시 시스템 설정에 따라서 구동이 되지 않고 아래와 같은 vm.max_map_count 관련 Error(에러)를 발생하는 경우가 있다.
해당 경우는 vm.max_map_count의 설정값이 애플리케이션에서 필요로 하는 수보다 작음에 따라서 발생하는 경우이다.
그럼 해당 에러를 어떻게 해결하는지 한번 알아보도록 하자.
1. 에러 발생 내용 확인
일단 현재 소나큐나를 구동하면 실행이 되지 않아서 우선적으로 console이라는 옵션을 통해서 소나큐브를 구동시켜 보았다.
소나큐브를 구동 시 start로도 가능하나, Log 등을 직접 콘솔 화면에서 볼 수 있도록 console 옵션이 존재하며 해당 옵션으로 실행 후 종료 시 소나큐브 서비스도 같이 중지된다.
그래서 console 옵션은 지금처럼 문제가 발생되는 경우 등과 같이 직접적으로 확인이 필요한 경우 사용하도록 하자.
- $ ./sonar.sh console
# 소나큐브 Console 옵션으로 실행
$ ./sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
... 이하 생략 ...
jvm 1 | ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
jvm 1 | bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
jvm 1 | ERROR: Elasticsearch did not exit normally - check the logs at /data/programs/sonarqube-9.3.0.51899/logs/sonarqube.log
jvm 1 | 2022.03.19 11:30:59 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
jvm 1 | 2022.03.19 11:30:59 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
jvm 1 | 2022.03.19 11:30:59 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
wrapper | <-- Wrapper Stopped
해당 경우는 vm.max_map_count의 설정값이 애플리케이션에서 필요로 하는 수보다 작음에 따라서 발생하는 경우이다.
참고로 vm.max_map_count Error의 경우 Elasticsearch(일래스틱서치) 구동 시에도 많이 발생하는 에러이며, 소나큐브에서는 Elasticsearch을 사용하고 있다.
max_map_count프로세스가 사용할 수 있는 메모리 맵 영역의 최대 수를 지정합니다. 대부분의 경우 기본값으로 65530이 적절합니다. 애플리케이션에 이 파일보다 많은 수를 매핑해야 하는 경우 이 값을 늘립니다.
이제 해당 vm.max_map_count에 설정된 값 변경을 통해서 현재 Error를 해결해보도록 하자.
2. 해결 하기
2.1 시스템 vm.max_map_count 설정 값 확인
- $ sysctl -a | grep vm.max_map_count
# vm.max_map_count 설정값 확인
$ sysctl -a | grep vm.max_map_count
vm.max_map_count = 65536
2.2 시스템 vm.max_map_count 설정 값 변경
- $ sysctl -w vm.max_map_count=262144
# vm.max_map_count 설정값 변경
$ sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
# vm.max_map_count 설정값 확인
$ sysctl -a | grep vm.max_map_count
vm.max_map_count = 262144
3. 소나큐브 구동
이제 다시 한번 console 옵션으로 구동을 해보도록 하자.
- $ ./sonar.sh console
# 소나큐브 Console 옵션으로 실행
$ ./sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2022.03.19 11:41:42 INFO app[][o.s.a.SchedulerImpl] Process[es] is up
jvm 1 | 2022.03.19 11:41:42 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/data/programs/sonarqube-9.3.0.51899]: /data/programs/jdk-11.0.14.1+1/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/data/programs/sonarqube-9.3.0.51899/temp -XX:-OmitStackTraceInFastThrow --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Dcom.redhat.fips=false -Xmx4096m -Xms2048m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/sonar-application-9.3.0.51899.jar:/data/programs/sonarqube-9.3.0.51899/lib/jdbc/postgresql/postgresql-42.3.1.jar org.sonar.server.app.WebServer /data/programs/sonarqube-9.3.0.51899/temp/sq-process945241133650902770properties
jvm 1 | 2022.03.19 11:41:51 INFO app[][o.s.a.SchedulerImpl] Process[web] is up
jvm 1 | 2022.03.19 11:41:51 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/data/programs/sonarqube-9.3.0.51899]: /data/programs/jdk-11.0.14.1+1/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/data/programs/sonarqube-9.3.0.51899/temp -XX:-OmitStackTraceInFastThrow --add-opens=java.base/java.util=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Dcom.redhat.fips=false -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/sonar-application-9.3.0.51899.jar:/data/programs/sonarqube-9.3.0.51899/lib/jdbc/postgresql/postgresql-42.3.1.jar org.sonar.ce.app.CeServer /data/programs/sonarqube-9.3.0.51899/temp/sq-process14245104795152016721properties
jvm 1 | 2022.03.19 11:41:53 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1 | 2022.03.19 11:41:53 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
이제 정상적으로 구동되는 것을 확인할 수 있다.
console 옵션으로 실행했기 때문에 해당 프로세스가 종료되면 바로 서비스도 종료되니 종료 후 start를 통해서 다시 정상적으로 구동시켜주도록 하자.
- $ Control + C(^C)
# 소나큐브 Console 옵션 종료(Control + C)
^Cwrapper | INT trapped. Shutting down.
jvm 1 | 2022.03.19 11:45:15 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ce]: 130
jvm 1 | 2022.03.19 11:45:15 INFO app[][o.s.a.SchedulerImpl] Process[ce] is stopped
jvm 1 | 2022.03.19 11:45:15 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 130
jvm 1 | 2022.03.19 11:45:15 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
jvm 1 | 2022.03.19 11:45:15 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [web]: 130
jvm 1 | 2022.03.19 11:45:15 INFO app[][o.s.a.SchedulerImpl] Process[web] is stopped
jvm 1 | 2022.03.19 11:45:15 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
wrapper | <-- Wrapper Stopped
- $ ./sonar.sh start
# 소나큐브 정상구동 및 구동 확인
$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.
$ ps -ef | grep sonar
happylie 8151 1 0 11:48 ? 00:00:00 /data/programs/sonarqube-9.3.0.51899/bin/linux-x86-64/./wrapper /data/programs/sonarqube-9.3.0.51899/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=SonarQube wrapper.pidfile=/data/programs/sonarqube-9.3.0.51899/bin/linux-x86-64/./SonarQube.pid wrapper.daemonize=TRUE
happylie 8153 8151 62 11:48 ? 00:00:02 /usr/lib/java/bin/java -Dsonar.wrapped=true -Djava.awt.headless=true --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/sonar-application-9.3.0.51899.jar:../../lib/jsw/wrapper-3.2.3.jar:../../lib/sonar-shutdowner-9.3.0.51899.jar -Dwrapper.key=hociIvroYBSXLeNW -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=8151 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.tanukisoftware.wrapper.WrapperSimpleApp org.sonar.application.App
happylie 8217 8153 99 11:48 ? 00:00:09 /data/programs/jdk-11.0.14.1+1/bin/java -XX:+UseG1GC -Djava.io.tmpdir=/data/programs/sonarqube-9.3.0.51899/temp -XX:ErrorFile=../logs/es_hs_err_pid%p.log -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 -Djna.tmpdir=/data/programs/sonarqube-9.3.0.51899/temp -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=COMPAT -Dcom.redhat.fips=false -Des.enforce.bootstrap.checks=true -Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/data/programs/sonarqube-9.3.0.51899/elasticsearch -Des.path.conf=/data/programs/sonarqube-9.3.0.51899/temp/conf/es -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=false -cp /data/programs/sonarqube-9.3.0.51899/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch
🌵댓글