当前位置: 首页 > news >正文

服务器性能优化通用方案

服务器性能优化通用方案

适用环境: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-32GB8GBfallocate -l 8G /swapfile
≥64GB4GBfallocate -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_processesuse 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_processesworker_rlimit_nofileworker_connections最大并发连接数
2核22000040968192
4核440000819232768
8核880000819265536
16核161600008192131072

三、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内存范围
4GB40-5070-100MB/进程
8GB80-10070-100MB/进程
16GB160-20070-100MB/进程
32GB300-40070-100MB/进程
64GB600-80070-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 缓冲池分配策略

总内存缓冲池比例计算示例
≤4GB50%2GB
4-16GB60%8GB内存 → 4.8GB
16-64GB70%32GB内存 → 22.4GB
≥64GB80%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>100MBswapon -s
MySQL缓冲命中率<95%<90%SHOW STATUS LIKE 'Innodb_buffer_pool_read%'
PHP进程内存>120MB>150MBps -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核8GFastCGI缓存 连接复用进程池优化 APCu缓存缓冲池4GB 线程缓存1,000-3,000
8核32G负载均衡 HTTP/2JIT编译 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 TDA[响应变慢] --> B{监控指标}B -->|CPU高| C[优化代码/升级CPU]B -->|内存满| D[调整进程/增加内存]B -->|磁盘IO高| E[SSD/缓存优化]B -->|MySQL慢| F[索引优化/查询缓存]
    
  3. 调优黄金法则

    • 每次只改一个参数
    • 📊 修改前后记录性能指标
    • 🔄 生产环境先灰度再全量
    • 💾 配置文件必须备份
http://www.lryc.cn/news/575120.html

相关文章:

  • 一个项目中调用两个不同后台,前端如何优雅实现无感刷新Token调用接口
  • webpack5 css-loader:从基础到原理
  • css实现a标签前面加小图标
  • 【GStreamer】减小延时的参数设置、从RTP中获取时间戳
  • 深入探索WordPress Multisite:构建与管理多站点网络
  • 【Lua 基础学习】
  • C++(智能指针)
  • LeetCode 3298.统计重新排列后包含另一个字符串的子字符串数目2
  • ivx创建一个测试小案例
  • Vue3插槽
  • 基于springboot+vue的智慧农业专家远程指导系统
  • 批量DWG转PDF工具
  • ES和 Kafka 集群搭建过程中的典型问题、配置规范及最佳实践
  • RK平台HDMI-IN/camera调试:预留CMA内存
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory
  • 打造属于你的AI智能体,从数据开始 —— 使用 Bright Data MCP+Trae快速构建垂直智能体
  • 操作系统之内存管理(王道)
  • Azure 自动化:所需状态配置 (DSC)
  • UniApp 开发第一个项目
  • Python虚拟环境管理:conda、venv、pipenv三国杀
  • JSON框架转化isSuccess()为sucess字段
  • Fisco Bcos学习 - 开发第一个区块链应用
  • PAC 学习框架:机器学习的可靠性工程
  • 通俗易懂解读BPE分词算法实现
  • 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型
  • 轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势
  • 领域驱动设计(DDD)【13】之重构中的坏味道:深入理解依恋特性(Feature Envy)与表意接口模式
  • 香港电讯携手Palo Alto Networks,护航企业跨区域数字化之旅
  • 第8章项目进度管理归纳总结补充
  • 英飞凌高性能BMS解决方案助力汽车电动化