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

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/

测试效果显著

相关文章:

  • 机器学习中的优化问题描述
  • Python列表:高效灵活的数据存储与操作指南
  • 讲讲JVM的垃圾回收机制
  • 基于大模型的输尿管下段结石诊疗全流程预测与方案研究
  • 项目课题——智能花盆系统设计
  • 核心机制:面向字节流
  • 业务:资产管理功能
  • Vim 调用外部命令学习笔记
  • 新一代 Rust Web 框架的高性能之选
  • 【数据结构】图算法(代码)
  • 微信小程序中的计算属性库-miniprogram-computed
  • 全新AI驱动Workspace Security 套件发布!Fortinet 电子邮件安全产品矩阵升级
  • docker compose v2版本创建和运行容器
  • 第九章 窗口看门狗(WWDG)
  • 在 macOS 上搭建 Flutter 开发环境
  • 论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(四)
  • 企业产品网络安全日志6月10日-WAF资费消耗排查
  • 【FFmpeg学习(2)】视频概念
  • 【FFmpeg学习(1)】图像表示
  • 如何将数据从 iPhone 传输到笔记本电脑
  • 网站充值怎么做分录/软文代写接单平台
  • 深圳专业做网站的公司哪家好/海外推广代理公司
  • 现在公众号做电影网站的发展/重庆网站快速排名优化
  • 网站建设包含哪些方面/河北seo推广
  • 面对撞库 网站应该怎么做/定制化网站建设
  • 用wordpress做的网站有哪些/百度权重域名