在 4 核 16G 的 Linux 云服务器上优化性能,需要从系统内核参数、内存管理、磁盘 I/O、网络栈、应用层配置以及监控诊断等多个维度协同调整。以下是经过生产验证的实用优化方案:
一、基础系统调优(内核与资源)
1. 调整 vm.swappiness
减少不必要的 swap 使用,提升内存响应速度:
# 临时生效
sudo sysctl -w vm.swappiness=10
# 永久生效:编辑 /etc/sysctl.conf
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
✅ 推荐值:数据库/高并发服务用
1~10;普通 Web 服务可30~60
2. 优化文件描述符与进程数限制
# 编辑 /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
# 编辑 /etc/pam.d/common-session 或对应 PAM 文件,确保加载 limits
session required pam_limits.so
重启后生效,或通过 ulimit -n 检查当前限制。
3. 内核参数优化(/etc/sysctl.conf)
针对高并发场景(如 Nginx + PHP-FPM + MySQL):
# 网络栈优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# 内存管理
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 100
应用:sudo sysctl -p
⚠️ 注意:避免过度调大
tcp_tw_reuse导致连接复用冲突,需结合业务类型评估。
二、磁盘 I/O 优化(尤其对 SSD/NVMe)
1. 选择合适 I/O 调度器
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 改为 none(SSD/NVMe 推荐)或 mq-deadline(机械盘)
echo none | sudo tee /sys/block/sda/queue/scheduler
# 永久生效:编辑 /etc/default/grub,添加
GRUB_CMDLINE_LINUX="elevator=none"
sudo update-grub && reboot
2. 挂载选项优化(以 ext4/xfs 为例)
# /etc/fstab 示例(根据实际设备名调整)
/dev/vdb1 /data xfs defaults,noatime,nodiratime,inode64 0 0
noatime/nodiratime:避免每次读取更新访问时间戳,显著降低随机读压力。inode64(xfs):提升大目录性能。
3. 使用 ionice 控制后台任务优先级
# 低优先级运行备份/日志轮转
ionice -c3 -p $(pgrep backup_script)
三、应用层针对性优化
1. Web 服务器(Nginx/Apache)
-
Nginx 示例优化(
nginx.conf):worker_processes auto; # 自动匹配 CPU 核心数(4 核 → 4) worker_rlimit_nofile 65535; events { worker_connections 8192; use epoll; # Linux 默认,但显式声明更清晰 } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; client_body_buffer_size 16k; client_max_body_size 10m; }
2. PHP-FPM 调优(若使用)
php-fpm.d/www.conf:
pm = dynamic
pm.max_children = 50 # 根据内存估算:(16G - 预留 4G) / (每进程 200MB) ≈ 60,保守设 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
request_terminate_timeout = 30s
3. 数据库(MySQL/MariaDB)
my.cnf 关键项:
[mysqld]
innodb_buffer_pool_size = 10G # 占物理内存 60%~70%,留足 OS 缓存
innodb_log_file_size = 512M
innodb_flush_method = O_DIRECT # 避免双重缓冲
max_connections = 200
thread_cache_size = 50
query_cache_type = 0 # 新版已废弃,建议关闭
💡 16G 内存下,OS 页缓存约 6G 足够支撑热点数据;InnoDB 缓冲池不宜超过 12G。
四、监控与诊断工具链
| 工具 | 用途 | 示例命令 |
|---|---|---|
htop |
实时进程/CPU/内存监控 | sudo apt install htop && htop |
iotop |
磁盘 I/O 瓶颈定位 | sudo iotop -oPa |
ss / netstat |
网络连接状态分析 | ss -s 看 TCP 队列积压 |
vmstat 1 |
整体系统负载(swap/io/wait) | vmstat 1 10 |
pidstat -d 1 |
进程级磁盘 I/O | pidstat -d 1 |
perf |
CPU 热点分析 | perf top -p <pid> |
📌 建议部署 Prometheus + Node Exporter + Grafana 实现长期监控告警。
五、其他实用技巧
- 禁用不必要的服务:
systemctl disable bluetooth.service cups.service avahi-daemon.service - 启用 NUMA 均衡(多路 CPU 时):
echo 1 | sudo tee /proc/sys/kernel/numa_balancing - 使用 ZRAM 替代 Swap(轻量级压缩交换):
sudo apt install zram-tools # 编辑 /etc/default/zramswap: # ZRAM_SIZE=4G (占用 4G 内存做高速压缩交换) sudo systemctl restart zramswap
六、验证效果
对比优化前后指标:
ab -n 10000 -c 100 http://your-server/(压测 QPS & 延迟)mysqlslap --concurrency=50 --iterations=10(DB 吞吐)- 观察
iostat -x 1中%util是否接近 100% - 检查
/proc/meminfo中Cached和Slab占比是否合理
✅ 最后提醒:
- 所有修改前请备份配置文件并在测试环境验证;
- 云厂商可能限制部分内核参数(如
net.core.somaxconn),需确认是否支持; - 优先解决瓶颈点(如慢查询、磁盘 IO wait > 20%),而非盲目全局调优。
如您能提供具体应用场景(如:高并发 API 网关 / 视频转码 / 大数据预处理),我可进一步给出定制化方案。
CLOUD技术博