升级硬件只是第一步,真正的性能释放在于软件层面的调优。从 2C2G 到 4C4G,你不仅拥有了一倍的 CPU 算力,还多出了一倍内存空间。如果配置不当,这多出来的资源可能只是“空转”,甚至因为参数不匹配导致系统不稳定。
以下是针对 Linux 系统(以 CentOS 7/Ubuntu 18.04+ 为例)的核心优化调整清单,按优先级排序:
1. 内核参数优化(sysctl.conf)
这是最直接影响网络吞吐和文件句柄处理的环节。2G 内存时代我们往往保守,现在可以大胆放开。
操作: 编辑 /etc/sysctl.conf,添加或修改以下参数:
# 增加最大文件句柄数,防止高并发下 "Too many open files"
fs.file-max = 1000000
# 增加本地端口范围,提高并发连接能力
net.ipv4.ip_local_port_range = 1024 65535
# TCP 连接重用,提速 TIME_WAIT 状态回收
net.ipv4.tcp_tw_reuse = 1
# 启用 TCP 快速打开(TFO),减少握手延迟
net.ipv4.tcp_fastopen = 3
# 增加 SYN 队列长度,防御轻微 CC/DDoS 攻击
net.ipv4.tcp_max_syn_backlog = 2048
# 增加半连接队列长度
net.core.somaxconn = 2048
# 内存管理相关:降低脏页回写比例,提升 I/O 稳定性
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 禁用 IPv6(如果不使用,建议关闭以减少解析开销)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
生效命令:
sysctl -p
2. 文件系统挂载优化(noatime)
默认情况下,Linux 每次读取文件都会更新文件的“最后访问时间”(atime)。对于高 I/O 场景,这是一笔巨大的额外写入开销。
操作: 修改 /etc/fstab 中根分区(/)和数据盘的挂载选项。
找到类似这一行:
UUID=xxxx-xxxx / ext4 defaults 0 1
改为:
UUID=xxxx-xxxx / ext4 defaults,noatime,nodiratime 0 1
noatime:不更新文件访问inode时间。nodiratime:不更新目录访问inode时间。
注意: 修改后需重启服务器或重新挂载生效。这对日志密集型应用(如 Nginx、MySQL)效果显著。
3. 数据库与中间件适配
不要指望自动扩容就能让 MySQL 或 Redis 跑得更快,它们的配置文件需要手动调整以利用新内存。
A. MySQL/MariaDB (my.cnf)
2G 时你可能只敢设 128M-256M 的 buffer pool,现在 4G 内存充裕了:
[mysqld]
# 根据实际业务调整,通常设为总内存的 50%-70%
innodb_buffer_pool_size = 2G
# 增加连接数上限
max_connections = 500
# 开启慢查询日志用于后续分析
slow_query_log = 1
long_query_time = 2
B. Redis (redis.conf)
Redis 是内存型数据库,充分利用新增的 2G 内存是关键:
# 设置 maxmemory,避免 OOM 被杀
maxmemory 3gb
# 设置淘汰策略,例如最近最少使用
maxmemory-policy allkeys-lru
C. Nginx/Apache
调整 worker 进程数和连接数:
# nginx.conf
worker_processes auto; # 自动匹配 CPU 核心数(现在是4核)
worker_rlimit_nofile 65535;
events {
worker_connections 10240; # 提高单进程最大连接数
use epoll; # 确保使用 epoll 模型
}
4. 交换空间(Swap)策略调整
很多人认为有了大内存就可以禁用 Swap,这是误区。Swap 的存在是为了防止极端情况下的 OOM(Out of Memory)崩溃,但频繁使用 Swap 会严重拖慢性能。
建议操作:
- 保留少量 Swap:建议保留 1G-2G 的 Swap 作为缓冲,而不是完全禁用。
- 调整 swappiness:告诉内核尽量避免使用 Swap。
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时调整为 10(极低优先级使用 swap)
sysctl vm.swappiness=10
# 永久修改,在 /etc/sysctl.conf 中添加
vm.swappiness = 10
5. 安全组与防火墙策略检查
升级服务器后,云厂商的安全组规则通常不会自动改变。但如果你之前为了省事开了 0.0.0.0/0 的所有端口,现在更要注意:
- 最小化原则:只开放必要端口(如 80, 443, 22)。
- SSH 加固:禁止 root 远程登录,改用密钥认证。
- fail2ban:安装并配置 fail2ban,自动屏蔽暴力破解 IP。
6. 监控与基线建立
升级前没有对比数据,升级后就无法感知“变好”了多少。
- 部署监控系统:推荐使用 Prometheus + Grafana 或简单的
htop、nethogs进行实时监控。 - 记录基准数据:在优化前后,分别对关键接口进行压测(使用 wrk 或 ab),记录 QPS、响应时间、CPU 利用率、内存占用等指标。
总结 checklist
| 项目 | 动作 | 预期收益 |
|---|---|---|
| sysctl.conf | 放开文件句柄、TCP 参数 | 提升并发处理能力,减少连接超时 |
| fstab | 添加 noatime | 降低磁盘 I/O 负载,提升读写速度 |
| MySQL/Redis | 调整 buffer_pool/maxmemory | 充分利用新增内存,减少磁盘交互 |
| Nginx | 调整 worker/connections | 匹配 4 核 CPU,提升静态服务效率 |
| Swappiness | 调低至 10 | 避免内存压力时频繁 swap 导致卡顿 |
| 安全 | 加固 SSH、限制端口 | 防止因资源增多而成为攻击目标 |
最后提醒: 任何配置修改前,务必备份原配置文件!建议在测试环境验证后再应用到生产环境。
云知道CLOUD