You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2 t2.micro实例部署SonarQube 6.0启动失败:Java内存不足

解决SonarQube在t2.micro实例上因内存不足无法启动的问题

从你的日志和系统内存信息来看,问题根源很明确:你的t2.micro实例只有1GB物理内存,而SonarQube默认配置的JVM最大堆内存(-Xmx1G)几乎占满了全部内存,再加上系统本身和MySQL的内存开销,直接导致JVM无法分配足够的内存启动。

下面是具体的解决步骤:

1. 调整SonarQube的JVM内存配置

SonarQube有两个核心进程(Web服务和搜索服务)都需要内存分配,我们需要分别降低它们的内存上限:

修改Wrapper全局JVM参数

编辑SonarQube的Wrapper配置文件:

sudo vi /opt/sonarqube/conf/wrapper.conf

找到默认设置为1024MB的内存配置行:

wrapper.java.maxmemory=1024

将其修改为更适合t2.micro的数值,比如384MB:

wrapper.java.maxmemory=384

修改搜索服务的内存参数

编辑SonarQube的主配置文件:

sudo vi /opt/sonarqube/conf/sonar.properties

找到sonar.search.javaOpts配置项,默认包含-Xmx1G,把它改成-Xmx256m,修改后的配置类似:

sonar.search.javaOpts=-Xmx256m -Xms256m -Xss256k -Djna.nosys=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError

小提示:把-Xms和-Xmx设成相同值,能避免JVM频繁调整堆内存,节省系统资源。

2. 优化MySQL的内存占用(可选但推荐)

因为MySQL也运行在同一个t2.micro实例上,它会占用不少内存。编辑MySQL的配置文件(通常是/etc/my.cnf),降低内存相关参数:

sudo vi /etc/my.cnf

在[mysqld]段添加或修改以下参数:

innodb_buffer_pool_size=128M
key_buffer_size=32M
query_cache_size=8M

保存后重启MySQL:

sudo service mysqld restart

3. 验证启动

先确保之前的SonarQube进程完全停止:

sudo ./sonar.sh stop

然后启动SonarQube:

sudo ./sonar.sh start

之后查看日志确认是否启动成功:

tail -f /opt/sonarqube/logs/sonar.log

为什么这样有效?

t2.micro实例的总内存只有约1GB,系统本身会占用100-200MB,MySQL默认配置可能占用300-500MB,留给SonarQube的内存本来就不多。通过降低SonarQube的JVM堆内存,给系统和MySQL留出足够的空间,就能让JVM成功分配内存启动服务。

内容的提问来源于stack exchange,提问作者kalyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:15:36