在Linux系统下如何优化2核4GB配置的云服务器性能?

在 2 核 4GB 的云服务器上优化性能,核心思路是减少资源竞争、提升缓存效率、降低系统开销。以下是经过验证的实用优化方案:


一、内核与系统级优化

  1. 调整虚拟内存(Swap)

    • 避免频繁使用 Swap 导致卡顿,但保留少量防止 OOM:

      # 临时设置(重启失效)
      sysctl vm.swappiness=10
      sysctl vm.vfs_cache_pressure=50
      
      # 永久生效:编辑 /etc/sysctl.conf
      echo "vm.swappiness=10" >> /etc/sysctl.conf
      echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
      sysctl -p
    • 若内存紧张且无 SSD,可禁用 Swap(仅推荐开发/测试环境):
      sudo swapoff -a && sudo sed -i '/swap/d' /etc/fstab
  2. CPU 调度优化

    • 将 CPU 亲和性绑定到可用核心(避免跨核迁移开销):
      # 示例:限制进程只运行在 core 0 和 1
      taskset -c 0,1 your_command
    • 对于 Web 服务(如 Nginx),启用 worker_cpu_affinity 绑定核心。
  3. 关闭不必要服务

    systemctl disable --now bluetooth.service    # 蓝牙
    systemctl disable --now cups.service         # 打印
    systemctl mask systemd-journald-audit.socket # 审计日志(非必需场景)

二、应用层优化

1. Web 服务器(以 Nginx + PHP-FPM 为例)

  • Nginx 配置优化 (/etc/nginx/nginx.conf):

    worker_processes 2;  # 匹配物理核数
    worker_rlimit_nofile 65535;
    events {
      worker_connections 2048;
      use epoll;
    }
    http {
      sendfile on;
      tcp_nopush on;
      tcp_nodelay on;
      keepalive_timeout 65;
      client_max_body_size 10M;
      gzip on;
      gzip_types text/plain application/json text/css;
    }
  • PHP-FPM 调优 (/etc/php/8.x/fpm/pool.d/www.conf):

    pm = dynamic
    pm.max_children = 8   # 4GB 内存建议值(每子进程约 50MB)
    pm.start_servers = 4
    pm.min_spare_servers = 2
    pm.max_spare_servers = 6
    request_terminate_timeout = 30s

2. 数据库优化(MySQL/MariaDB)

  • 修改 /etc/mysql/my.cnf/etc/mariadb/mariadb.cnf
    [mysqld]
    innodb_buffer_pool_size = 1G      # 占物理内存 25%
    max_connections = 100             # 根据并发调整
    query_cache_type = 0              # 新版 MySQL 已废弃,旧版设为 OFF
    slow_query_log = 1
    long_query_time = 2
    log_queries_not_using_indexes = 1

    💡 注意:4GB 内存下,InnoDB 缓冲池不宜超过 1.5GB,预留空间给 OS 和其他进程。

3. 缓存中间件(Redis)

  • 限制最大内存并启用 LRU 淘汰:
    maxmemory 1gb
    maxmemory-policy allkeys-lru
    save ""                # 禁用持久化(高频写入场景)
    appendonly no          # 关闭 AOF

三、监控与诊断工具

  • 实时性能监控
    htop                 # 查看 CPU/内存/进程
    iotop                # 磁盘 IO 分析
    ss -tulnp            # 网络连接状态
    free -h              # 内存详情
  • 慢查询分析
    • MySQL: EXPLAIN SELECT ...
    • Redis: slowlog get 10
    • Nginx: 开启 access/error 日志 + awk 分析耗时

四、进阶技巧(按需选择)

场景 优化手段
静态资源多 启用 CDN + Nginx 静态文件直传(location ~* .(jpg|png|css|js)$ { expires 7d; }
高并发短连接 调整 TCP 参数:
net.ipv4.tcp_tw_reuse = 1
net.core.somaxconn = 1024
Java 应用 JVM 堆内存限制:
-Xms512m -Xmx512m -XX:+UseG1GC
Docker 容器 设置资源限制:
docker run --cpus="1.5" --memory="2g" ...

五、避坑指南

  • ❌ 不要盲目增加 Swap 大小(SSD 除外)
  • ❌ 避免同时运行多个重型服务(如 MySQL + Redis + Elasticsearch)
  • ✅ 优先优化代码逻辑(如减少数据库查询次数、添加索引)
  • ✅ 定期清理日志(journalctl --vacuum-time=3d

📌 关键原则:先通过 htop/iostat 定位瓶颈(CPU?内存?IO?),再针对性优化。例如:若 wa(IO wait)过高,说明磁盘是瓶颈,应考虑升级到 NVMe 或优化查询。

需要具体某类应用(如 WordPress、Spring Boot)的优化方案,可补充说明场景,我会提供定制化配置。

未经允许不得转载:CLOUD技术博 » 在Linux系统下如何优化2核4GB配置的云服务器性能?