CentOS或Ubuntu 2核2G服务器部署若依Ruoyi-vue项目常见卡顿问题怎么解决?

针对2核2G服务器部署若依(Ruoyi-vue)项目常见的卡顿问题,可以从以下几个方面进行优化:

一、基础环境优化

1. 系统参数调整

# 增加文件描述符限制
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

# 调整内核参数(CentOS)
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo "net.core.somaxconn=2048" >> /etc/sysctl.conf
sysctl -p

2. 服务分离部署

# 建议将服务拆分到不同容器或进程
# 方案1:Nginx + Redis + MySQL + Java应用分离
# 方案2:使用Docker Compose分别部署

二、Java应用优化

1. JVM参数优化

# 修改启动脚本(ruoyi-admin的start.sh或application.yml)
JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
# 或
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

2. Spring Boot配置优化

# application.yml
server:
  tomcat:
    max-threads: 50  # 减少线程数(默认200)
    min-spare-threads: 10
    max-connections: 1000
    accept-count: 100
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/xml,text/plain

三、数据库优化

1. MySQL配置优化(my.cnf)

[mysqld]
# 内存相关
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8

# 连接相关
max_connections = 50  # 减少连接数
wait_timeout = 300
interactive_timeout = 300

# InnoDB优化
innodb_buffer_pool_size = 256M  # 关键参数
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2

2. Redis优化

# application-redis.yml
redis:
  lettuce:
    pool:
      max-active: 8    # 减少连接数
      max-idle: 8
      min-idle: 0

四、前端优化

1. Nginx配置优化

# 启用gzip压缩
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css;

# 静态资源缓存
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

# 反向XX优化
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;

2. 前端构建优化

// vue.config.js
module.exports = {
  productionSourceMap: false,  // 关闭sourcemap
  configureWebpack: {
    optimization: {
      splitChunks: {
        chunks: 'all',
        minSize: 10000,
        maxSize: 250000,
      }
    }
  }
}

五、应用层优化

1. 若依特定优化

# application.yml
# 关闭不必要的功能
ruoyi:
  # 减少日志级别
  log:
    level: WARN

  # 调整定时任务线程池
  job:
    pool-size: 5

2. 代码层面优化

// 1. 减少不必要的@Async异步调用
// 2. 优化复杂SQL查询,添加索引
// 3. 使用@Cacheable缓存热点数据
// 4. 分页查询添加limit限制

六、监控与诊断

1. 安装监控工具

# 安装htop查看资源使用
yum install htop -y  # CentOS
apt install htop -y   # Ubuntu

# 使用arthas进行Java诊断
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

2. 常用诊断命令

# 查看内存使用
free -h
top -p $(pgrep -f java)

# 查看连接数
netstat -an | grep :8080 | wc -l

# 查看慢查询
mysqldumpslow -s t /var/log/mysql/slow.log

七、应急方案

1. 临时缓解措施

# 重启服务(按顺序)
systemctl restart redis
systemctl restart mysql
systemctl restart nginx
# 最后重启Java应用

# 清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches

2. 降级策略

  • 关闭非核心功能(如websocket、定时任务)
  • 静态化首页
  • 减少数据导出/导入的并发

建议的部署架构

方案A(单机优化):
Nginx(80) → Ruoyi-vue(8080) + Redis + MySQL

方案B(推荐-容器化):
Docker Compose部署,每个服务独立容器,资源限制:
  ruoyi-app: 内存1G, CPU 1核
  mysql: 内存512M, CPU 0.5核
  redis: 内存128M, CPU 0.3核
  nginx: 内存64M, CPU 0.2核

注意事项

  1. 定期重启:建议每周重启一次应用释放内存
  2. 日志清理:配置logrotate定期清理日志
  3. 备份策略:确保数据库定时备份
  4. 升级考虑:如业务增长,建议升级到4核4G配置

通过以上优化,2核2G服务器应该能够稳定运行若依系统,支持50-100并发用户。如果仍有卡顿,建议使用APM工具(如SkyWalking)进一步分析性能瓶颈。

云服务器