在 2 核 4GB 的云服务器上优化性能,核心思路是减少资源竞争、提升缓存效率、降低系统开销。以下是经过验证的实用优化方案:
一、内核与系统级优化
-
调整虚拟内存(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
-
-
CPU 调度优化
- 将 CPU 亲和性绑定到可用核心(避免跨核迁移开销):
# 示例:限制进程只运行在 core 0 和 1 taskset -c 0,1 your_command - 对于 Web 服务(如 Nginx),启用
worker_cpu_affinity绑定核心。
- 将 CPU 亲和性绑定到可用核心(避免跨核迁移开销):
-
关闭不必要服务
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分析耗时
- MySQL:
四、进阶技巧(按需选择)
| 场景 | 优化手段 |
|---|---|
| 静态资源多 | 启用 CDN + Nginx 静态文件直传(location ~* .(jpg|png|css|js)$ { expires 7d; }) |
| 高并发短连接 | 调整 TCP 参数:net.ipv4.tcp_tw_reuse = 1net.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技术博