阿里云 ECS 性能优化与调优心得
背景
服务器跑了一段时间后,偶尔会出现响应变慢的情况。通过一系列排查和优化,整理出了这份调优笔记。
排查思路
性能优化不能盲目调参数,要先定位瓶颈:
# CPU 使用率
top -c
# 内存使用
free -h
# 磁盘 IO
iostat -x 1
# 网络
iftop
# 系统负载
uptime
先看哪个指标?通常顺序是:CPU → 内存 → 磁盘 IO → 网络。
系统级优化
1. 内核参数调优
编辑 /etc/sysctl.conf:
# 网络连接优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 文件描述符
fs.file-max = 655350
fs.nr_open = 655350
# 内存
vm.swappiness = 10
vm.overcommit_memory = 1
# 生效
sysctl -p
2. 用户文件描述符限制
编辑 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
Nginx 优化
# worker 进程数(设为 CPU 核心数)
worker_processes auto;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
# 开启 gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1000;
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# 连接优化
keepalive_timeout 65;
keepalive_requests 100;
}
MySQL 优化
[mysqld]
# 连接数
max_connections = 500
# 缓存
innodb_buffer_pool_size = 1G
query_cache_size = 64M
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
实际效果
优化前后的对比(4C8G 配置,主要跑几个 Web 服务):
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 平均响应时间 | 450ms | 120ms |
| 最大并发连接 | 200 | 800+ |
| CPU 峰值使用率 | 85% | 45% |
| 内存使用 | 6.8G | 5.2G |
效果还是比较明显的。
监控告警
调优只是第一步,更重要的是持续监控。建议配置:
- 阿里云云监控:CPU、内存、磁盘、网络的基础告警
- Nginx access log 分析:定期查看慢请求
- MySQL slow log:定位慢查询
优化是一个持续的过程,不是一劳永逸的。
总结
ECS 调优的核心思路:
- 先定位瓶颈,再针对性优化
- 系统参数调优是基础,应用层优化是关键
- 配置监控告警,问题早发现早处理
- 不要过度优化,够用就好