ubuntu + nginx 1.26 + php7.4 + mysql8.0 调优

服务器配置 8核 16G

查看内存 free -h

nginx配置

复制代码
worker_processes auto;          # 自动检测CPU核心数
worker_rlimit_nofile 65535;     # 提高文件描述符限制
​
events {
    worker_connections 8192;    # 每个worker的最大连接数
    multi_accept on;            # 一次性接受所有连接
    use epoll;                  # 使用epoll事件模型
}
​
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;                # 高效文件传输
    tcp_nopush on;              # 减少网络包数量
    tcp_nodelay on;             # 实时数据传输
    keepalive_timeout 65;       # 长连接超时时间
    server_tokens off;          # 隐藏Nginx版本信息
    
    # Gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 虚拟主机配置
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

mysql数据库调优

基本配置

复制代码
[mysqld]
# 基础设置
# 仅本地访问
bind-address = 127.0.0.1    
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 最大连接数
max_connections = 300        
# 连接超时时间
wait_timeout = 600           
​
# 内存分配 (约占总内存的60%)
# InnoDB缓冲池大小
innodb_buffer_pool_size = 6G  
# 日志文件大小
innodb_log_file_size = 512M  
# MyISAM索引缓冲区
key_buffer_size = 128M          
#排序操作缓冲区大小 推荐值:1M-8M,根据服务器内存和查询复杂度调整 如从 2M 逐步增加到 4M、8M
sort_buffer_size = 4M          
# 随机读缓冲区       
read_rnd_buffer_size = 4M          
# JOIN操作缓冲区       
join_buffer_size = 4M         
​
# 性能优化
# 平衡性能与安全性
innodb_flush_log_at_trx_commit = 2   
# 二进制日志同步频率
sync_binlog = 100                     
# IOPS估计值
innodb_io_capacity = 2000            
# 读IO线程数
innodb_read_io_threads = 8           
# 写IO线程数
innodb_write_io_threads = 8          
# 线程并发数
innodb_thread_concurrency = 16
​
# 在【mysqld】下加入以下配置(解决group by报错解决)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
group_concat_max_len = 102400
# 时区设置
default-time_zone = '+8:00'

开启缓慢sql日志

复制代码
# 启用慢查询日志
slow_query_log = 1
# 慢查询日志文件路径
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 设置慢查询时间阈值(单位:秒)
long_query_time = 3
# 记录未使用索引的查询
log_queries_not_using_indexes = 1

php-fmp 配置优化

基础配置

复制代码
计算最大进程数

# 计算平均php进程平均内存
ps -ylC php-fpm7.4 --sort:rss | awk '{sum+=$8; n++} END {print "平均内存(KB): " sum/n}'
# 计算最大进程数  PHP-FPM + MySQL 总内存建议控制在 12GB 左右(留 4GB 给系统)
# 可用内存(MB) ÷ 单个进程内存(MB) = 最大进程数

配置 /etc/php/7.4/fpm/pool.d/www.conf

复制代码
[www]
pm = dynamic
; (1024MB*6) ÷ 32MB ≈ 192(pm.max_children值)
pm.max_children = 190      
; 初始进程数
pm.start_servers = 20     
; 最小空闲进程数
pm.min_spare_servers = 10  
; 最大空闲进程数
pm.max_spare_servers = 30    
; 空闲进程超时时间
pm.process_idle_timeout = 10s 
; 单个请求最大执行时间(秒)
request_terminate_timeout = 30 
; 慢请求日志阈值
request_slowlog_timeout = 5s  
; 慢请求日志路径
slowlog = /var/log/php7.4-fpm-slow.log 
; 提高文件描述符限制
rlimit_files = 65535      
复制代码
    

启用 OPcache 默认启动

复制代码
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=1
opcache.fast_shutdown=1

压力测试 ApacheBench

安装

复制代码
sudo apt install apache2-utils

# 模拟1个客户端请求100次:
ab -n 100 http://www.example.com/

# 模拟100个客户端请求10000次:
ab -n 10000 -c 100 http://www.example.com/

# 调用POST方法的接口10次,传输的数据格式为JSON:
ab -n 10 -p json-file http://www.example.com/

# 调用OPTIONS方法的接口10次:
ab -n 10 -m OPTIONS http://www.example.com/

# 输出每次请求的返回信息:
ab -n 10 -v 2 http://www.example.com/

测试效果显著

相关推荐
weixin_3077791311 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
小生不才yz11 小时前
Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目
linux
x-cmd11 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
流浪00112 小时前
Git篇(三):吃透远程协作:SSH 密钥、分支、标签全流程实战指南
运维·git·ssh
六点_dn12 小时前
Linux学习笔记-chmod命令
linux·笔记·学习
AOwhisky12 小时前
Python 基础语法(上篇 + 下篇)——综合自测题
linux·windows·python
浮江雾12 小时前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础
FoldWinCard12 小时前
D4 Linux 进程 内存 等命令
linux·运维·服务器
在线OJ的阿川12 小时前
仿muduo库实现高并发服务器
linux·服务器·c++
番茄育学园13 小时前
2026表格自动化工具实测:四个不同方案,适配不同办公场景
运维·自动化