服务器性能优化通用方案

发布于:2025-06-26 ⋅ 阅读:(16) ⋅ 点赞:(0)

服务器性能优化通用方案

适用环境:Ubuntu 24.04 + Nginx + PHP-FPM + MySQL
版本要求:Nginx 1.18+,PHP 7.4+,MySQL 8.0+

一、系统层优化

1.1 内核参数调优 (/etc/sysctl.conf)

# 网络优化(通用所有配置)
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 65535

# 内存管理(按内存调整)
vm.swappiness = 10                        # 内存<16G时设为5
vm.dirty_ratio = 10                       # 内存>32G时可增至15
vm.dirty_background_ratio = 5

# 文件系统(通用)
fs.file-max = 500000
fs.inotify.max_user_watches = 524288

1.2 资源限制 (/etc/security/limits.conf)

* soft nofile 100000
* hard nofile 150000
www-data soft nofile 100000               # Nginx/PHP用户
mysql hard nofile 65535                   # MySQL用户

1.3 Swap配置策略

内存大小 Swap建议 创建命令
≤16GB 内存的1.5倍 fallocate -l 24G /swapfile
16-32GB 8GB fallocate -l 8G /swapfile
≥64GB 4GB fallocate -l 4G /swapfile

二、Nginx优化

2.1 基础配置 (/etc/nginx/nginx.conf)

worker_processes auto;                    # 自动匹配CPU核心
worker_rlimit_nofile 100000;              # 文件描述符限制

events {
    worker_connections 8192;              # 计算公式:worker_connections ≤ (worker_rlimit_nofile) / worker_processes
    use epoll;                            # Linux高性能模式
    multi_accept on;
}

http {
    keepalive_timeout 15;
    keepalive_requests 1000;
    sendfile on;
    tcp_nopush on;
    
    # Gzip压缩(通用)
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_types text/plain text/css application/json application/javascript;
    
    # 静态资源缓存(通用)
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
}

2.2 进程连接数优化表

CPU核心数 worker_processes worker_rlimit_nofile worker_connections 最大并发连接数
2核 2 20000 4096 8192
4核 4 40000 8192 32768
8核 8 80000 8192 65536
16核 16 160000 8192 131072

三、PHP-FPM优化

3.1 进程管理策略 (/etc/php/7.4/fpm/pool.d/www.conf)

pm = dynamic
; 计算公式:pm.max_children = (内存GB × 0.8) / PHP进程平均内存MB
pm.start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_requests = 1000
request_terminate_timeout = 30

3.2 内存分配参考表

内存总量 pm.max_children 内存范围
4GB 40-50 70-100MB/进程
8GB 80-100 70-100MB/进程
16GB 160-200 70-100MB/进程
32GB 300-400 70-100MB/进程
64GB 600-800 70-100MB/进程

3.3 OpCache配置 (/etc/php/7.4/fpm/php.ini)

opcache.enable=1
; 内存分配建议:
; 内存≤16G:128M
; 内存32G:192M
; 内存≥64G:256M
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60

四、MySQL优化

4.1 核心配置 (/etc/mysql/my.cnf)

[mysqld]
# 缓冲池大小(关键参数)
innodb_buffer_pool_size = 总内存 × 缓冲池比例

# 日志文件大小(SSD建议)
innodb_log_file_size = 缓冲池大小 / 8

# 通用优化
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = ON
innodb_flush_method = O_DIRECT
skip_name_resolve = ON

4.2 缓冲池分配策略

总内存 缓冲池比例 计算示例
≤4GB 50% 2GB
4-16GB 60% 8GB内存 → 4.8GB
16-64GB 70% 32GB内存 → 22.4GB
≥64GB 80% 128GB内存 → 102GB

4.3 连接数配置

max_connections = 基础值 × CPU核心数
; 基础值:
; - 内存<8G: 50
; - 内存8-32G: 75
; - 内存>32G: 100

# 示例:8核32G内存
max_connections = 75 * 8  # 计算结果为600
thread_cache_size = max_connections × 0.1

五、监控与维护方案

# 系统级
sudo apt install htop iotop iftop netdata

# MySQL专用
sudo apt install mytop percona-toolkit

5.2 关键指标报警阈值

指标 警告阈值 危险阈值 检查命令
CPU使用率 70% 90% top -1
内存使用 80% 90% free -h
Swap使用 >0 >100MB swapon -s
MySQL缓冲命中率 <95% <90% SHOW STATUS LIKE 'Innodb_buffer_pool_read%'
PHP进程内存 >120MB >150MB ps -o rss,cmd -C php-fpm

5.3 自动化维护脚本

#!/bin/bash
# 每日优化任务
mysql -e "SET GLOBAL innodb_max_dirty_pages_pct_lwm=10; SET GLOBAL innodb_max_dirty_pages_pct=90;"  					# 强制刷新脏页
mysqlcheck --optimize --all-databases               # 表优化
find /var/log/nginx -type f -mtime +7 -delete       # 日志清理
systemctl reload php7.4-fpm                         # 平滑重启PHP

六、硬件资源分配矩阵

资源规格 Nginx重点 PHP重点 MySQL重点 预期并发
2核4G 静态缓存 Gzip压缩 降级OpCache 限制进程数 小缓冲池 关闭性能模式 500-1,000
4核8G FastCGI缓存 连接复用 进程池优化 APCu缓存 缓冲池4GB 线程缓存 1,000-3,000
8核32G 负载均衡 HTTP/2 JIT编译 OPcache优化 缓冲池22GB 读写分离 5,000-10,000
16核64G+ 四层代理 动态扩容 Swoole协程 内存数据库 多缓冲实例 分库分表 20,000+

七、调优验证流程

  1. 压力测试工具

    # 基础测试
    ab -n 10000 -c 500 http://yourdomain.com/
    
    # 高级测试
    wrk -t8 -c1000 -d30s --latency http://yourdomain.com/
    
  2. 瓶颈诊断步骤

    graph TD
      A[响应变慢] --> B{监控指标}
      B -->|CPU高| C[优化代码/升级CPU]
      B -->|内存满| D[调整进程/增加内存]
      B -->|磁盘IO高| E[SSD/缓存优化]
      B -->|MySQL慢| F[索引优化/查询缓存]
    
  3. 调优黄金法则

    • 每次只改一个参数
    • 📊 修改前后记录性能指标
    • 🔄 生产环境先灰度再全量
    • 💾 配置文件必须备份

网站公告

今日签到

点亮在社区的每一天
去签到