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/

测试效果显著

相关推荐
JeffersonZU20 分钟前
Linux/Unix 套接字Socket编程(socket基本概念,流程,流式/数据报socket,Unix domain socket示例)
linux·c语言·tcp/ip·udp·unix·gnu
先做个垃圾出来………43 分钟前
自动化一次通过率
运维·自动化
Two_brushes.1 小时前
【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
linux·开发语言·网络·tcp/udp
夕泠爱吃糖2 小时前
Linux中的静态库和动态库
linux·运维·服务器
比奥利奥还傲.3 小时前
Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战
linux·运维·安全
诗意亭序3 小时前
ubuntu16.04 虚拟机与电脑共用wifi
ubuntu
mmsx3 小时前
使用git生成ssh的ed25519密钥
运维·git·ssh
scilwb4 小时前
Isaac Sim 4.5中iRobot Create 3机器人LightBeam传感器系统完整实现教程
ubuntu
ZeroNews内网穿透4 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
果子⌂4 小时前
容器技术入门之Docker环境部署
linux·运维·docker