阿里云 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 服务):

指标优化前优化后
平均响应时间450ms120ms
最大并发连接200800+
CPU 峰值使用率85%45%
内存使用6.8G5.2G

效果还是比较明显的。

监控告警

调优只是第一步,更重要的是持续监控。建议配置:

  • 阿里云云监控:CPU、内存、磁盘、网络的基础告警
  • Nginx access log 分析:定期查看慢请求
  • MySQL slow log:定位慢查询

优化是一个持续的过程,不是一劳永逸的。

总结

ECS 调优的核心思路:

  1. 先定位瓶颈,再针对性优化
  2. 系统参数调优是基础,应用层优化是关键
  3. 配置监控告警,问题早发现早处理
  4. 不要过度优化,够用就好