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/

测试效果显著

相关推荐
EMTime13 分钟前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王40 分钟前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子2 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
printfLILEI3 小时前
php中的类与对象以及反序列化
linux·开发语言·php
zyl837213 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry3 小时前
MGRE实验
运维·服务器
叠叠乐4 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime4 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
xiaoye-duck5 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux