SonarQube远程JMX连接失败求助:按文档配置仍无法用JConsole连接
我按照SonarQube官方文档修改了sonar.properties配置远程JMX访问,具体配置如下:
sonar.web.javaAdditionalOpts=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.port=10443 -Dcom.sun.management.jmxremote.rmi.port=10444 -Dcom.sun.management.jmxremote.password.file=/opt/sonarsource/sonar/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/opt/sonarsource/sonar/conf/jmxremote.access
已创建jmxremote.access和jmxremote.password文件,重启SonarQube后,JConsole远程连接失败。
以下是针对性的排查与解决步骤:
严格校验文件权限
JMX的jmxremote.access和jmxremote.password文件对权限要求极高,必须仅允许SonarQube运行用户拥有读权限,其他用户无任何权限。执行命令:chmod 600 /opt/sonarsource/sonar/conf/jmxremote.access /opt/sonarsource/sonar/conf/jmxremote.password chown sonarqube:sonarqube /opt/sonarsource/sonar/conf/jmxremote.access /opt/sonarsource/sonar/conf/jmxremote.password注意替换
sonarqube为实际运行SonarQube的用户和组。检查文件内容格式
jmxremote.access需遵循用户名 权限格式,示例:monitorRole readonly controlRole readwritejmxremote.password需遵循用户名 密码格式,示例:monitorRole secret123 controlRole secret456
确保两个文件的用户名完全匹配,无多余空格或格式错误。
确认端口监听状态
登录SonarQube服务器,检查10443和10444端口是否被SonarQube进程监听:netstat -tulpn | grep -E '10443|10444'若端口未被监听,查看SonarQube启动日志(通常路径
/opt/sonarsource/sonar/logs/web.log),排查JMX配置相关报错。排查网络与防火墙
- 确保服务器防火墙放行10443、10444端口的入站流量;
- 在JConsole所在机器上,用
telnet或nc测试连通性:
连接失败则检查网络路由或防火墙规则。telnet <SonarQube服务器IP> 10443 nc -zv <SonarQube服务器IP> 10444
添加JMX主机绑定配置
部分环境需显式指定JMX绑定的服务器IP,避免仅绑定localhost。在sonar.web.javaAdditionalOpts中添加:-Djava.rmi.server.hostname=<SonarQube服务器实际IP>替换为服务器的公网/内网IP,重启SonarQube后重试连接。
验证JConsole连接参数
JConsole远程连接地址可使用格式:service:jmx:rmi:///jndi/rmi://<服务器IP>:10443/jmxrmi,或直接输入<服务器IP>:10443,确保用户名密码与jmxremote.password完全一致。
内容的提问来源于stack exchange,提问作者kudikala praveen

