一、背景介绍

由于个人云服务器主要用于测试,配置较低(2核4G),上面安装的程序不少,内存吃紧。

安装的程序有:

1.mysql数据库。

2.RabbitMQ。

3.Gitblit源码管理。

4.两个springboot程序(个人博客)。

5.1panel管理端。

其中,mysql和springboot是吃内存大户,结合AI给的优化建议,做了以下优化:

二、优化 MySQL

在 /etc/my.cnf 或 /etc/mysql/my.cnf 的 [mysqld] 下添加/修改以下参数,修改后重启 MySQL

[mysqld]
# 关键:InnoDB缓冲池,MySQL最大的内存消耗者
# 4G服务器,建议分配 256M ~ 512M,留够内存给Java和系统
innodb_buffer_pool_size = 256M

# 限制连接数,每个连接都会消耗内存
max_connections = 50

# 关闭性能模式,能省几十~上百M内存
performance_schema = OFF

# 减少排序、join等操作的临时内存
sort_buffer_size = 256K
join_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K

# 如果不需要,可以关闭查询缓存(MySQL 8.0已移除)
# query_cache_type = 0
# query_cache_size = 0

按上面的配置,MySQL 的内存占用通常能控制在 500MB 以内

三、优化 Spring Boot

限制 Java 堆大小,给 Spring Boot 程序设一个“硬上限”,防止它无休止地吃内存。

启动命令添加参数

java -Xms256m -Xmx512m -XX:MaxMetaspaceSize=128m -jar your-app.jar

-Xms256m -Xmx512m:堆内存初始256M,最大512M。建议设为相同值避免动态伸缩开销。

-XX:MaxMetaspaceSize=128m:限制元空间(类元数据),防止动态增长过多。

优化后内存占用情况。

四、组合后的内存预算参考

在 4GB 总内存下,一个可行的分配方案是:

  • 系统及缓冲区:预留 500MB~1GB

  • MySQL:限制在 400~600MB(通过 buffer pool 等配置)

  • Spring Boot JVM:堆 256~512MB + 元空间 + 本地内存 ≈ 总共 不超过 700MB

这样合计约 2GB 左右,留有一定余量,避免 OOM Killer 突然杀死进程。

更多推荐