tp6+swoole+mysql+nginx+redis高并发优化

2024-06-13 11:52

本文主要是介绍tp6+swoole+mysql+nginx+redis高并发优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.服务器

IDC机房提供的物理机:单机 40核,64G内存,带宽100M,

2.redis 7.2配置

timeout=600 #空闲连接超时时间,0表示不断开
maxclients=100000 #最大连接数

3.Mysql 5.7配置,按宝塔16-32G优化方案并调整:

table_open_cache = 4096
max_connections = 15000

4.Nginx 1.24配置

worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 1000000;
multi_accept on;
}

5.php 7.2配置

php.ini:memory_limit=30720M
在这里插入图片描述
tp6: config/swoole.php配置server:

//配置选项:https://geekdaxue.co/read/swoole-wiki/doc-2.3-Configuration-Options.md
'server'     => ['host'      => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址'port'      => env('SWOOLE_PORT', 8324), // 监听端口'mode'      => SWOOLE_PROCESS, // 运行模式 默认为SWOOLE_PROCESS'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP'options'   => ['pid_file'              => runtime_path() . 'swoole.pid','log_file'              => runtime_path() . 'swoole.log','daemonize'             => false,// Normally this value should be 1~4 times larger according to your cpu cores.'reactor_num'           => swoole_cpu_num(),'worker_num'            => swoole_cpu_num(),'task_worker_num'       => swoole_cpu_num(),'task_enable_coroutine' => false,'task_max_request'      => 20000, //修改了这里'enable_static_handler' => true,'document_root'         => root_path('public'),'package_max_length'    => 50 * 1024 * 1024,'buffer_output_size'    => 10 * 1024 * 1024,'socket_buffer_size'    => 128 * 1024 * 1024,'max_request'           => 30000, //修改了这里'max_connection'        => 30000, //修改了这里'send_yield'            => true,'reload_async'          => true,],],

6.进程管理器 supervisor 配置

[supervisord]
minfds=1000000
minprocs=50000
stopwaitsecs=60 #你也可以调的更大

7.解决 Swoole 服务报错 Too many open files 文件句柄超出系统限制

  • 1.在 Swoole 的日志中遇到了 Too many open files 这种报错,说明你的程序以达到 Linux 所允许的打开文件数上限。需要修改 ulimit 设置,修改 /etc/security/limits.conf,加入
* soft nofile 262140
* hard nofile 262140
root soft nofile 262140
root hard nofile 262140
* soft core unlimited
* hard core unlimited
root soft core unlimited
root hard core unlimited

需要重启系统生效

或者:ulimit -n 1000000 对当前命令窗口有效
  • 2.# 将 PID 修改为你要检查的进程ID
cat /proc/PID/limits

如果这里的Max open files过小,也是需要进行修改的

  • 3.systemd 需要修改LimitNOFILE,修改systemd全局limit:
    /etc/systemd/system.conf
    在这里插入图片描述

8.Swoole优化内核参数调整,修改文件/etc/sysctl.conf:

vm.overcommit_memory = 1
net.core.somaxconn = 99999
net.unix.max_dgram_qlen = 10000
net.ipv4.tcp_mem  =   379008       505344  758016
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_rmem = 4096          87380   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 81920
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_keepalive_time = 300
net.ipv4.ip_local_port_range = 20000 65000
net.ipv4.tcp_max_tw_buckets = 200000
net.ipv4.route.max_size = 5242880
kernel.msgmnb = 42035200
kernel.msgmni = 99999
kernel.msgmax = 819200
net.local.dgram.maxdgram = 819200
net.local.dgram.recvspace = 200000
kernel.core_pattern = /data/core_files/core-%e-%p-%t

内核参数调整方案2:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq = 1
#优化
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_retries2=3
net.ipv4.tcp_orphan_retries=2

需执行sysctl -p命令使配置生效或重启服务器,参考:https://www.bookstack.cn/read/SwooleDoc/10.md

9.ab工具并发测试:

./ab -c10000 -n10000 http://127.0.0.1:8088/

这篇关于tp6+swoole+mysql+nginx+redis高并发优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057227

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的