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

1.服务器

IDC机房提供的物理机:单机 40核,64G内存,带宽100M,最后带宽增加至300M

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,
     ],
 ],
//连接池
'pool' => [
	//数据库
    'db' => [
        'enable'        => true,
        'max_active'    => 10, //修改了这里 - 原来是3,最大不超32
        'max_wait_time' => 5,
    ],
    //缓存
    'cache' => [
        'enable'        => true,
        'max_active'    => 10, //修改了这里 - 原来是3,最大不超32
        'max_wait_time' => 5,
    ],
],

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/715587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

经验分享,如何去除文本中的空格

有时候我们需要去掉一窜文本中的空格,这里分享一个好用的免费网站,可实现在线去除 网址:http://www.txttool.com/t/?idMzM4 使用截图:

Vue53-Todo-list案例

一、需求: 二、组件的划分:按照功能划分 组件起名,不要和html内置元素重名! Vue鼓励组件名用多个单词。 三、组件化编码流程 3-1、实现静态组件 将各个组件的基本框架写好,并在App.vue文件中进行引入和注册。 将已有…

sslh一键在一个端口上运行多个服务(KALI工具系列二十三)

目录 1、KALI LINUX 简介 2、sslh工具简介 3、信息收集 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 监听特定端口 4.2 配置SSH 4.3 配置apache 4.4 配置sshl 4.5 验证配置 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、…

.net 调用海康SDK的常用操作封装

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅…

滚动轴承数字孪生模拟信号(Python)

以SKF6312轴承型号为例 class SKF6312:def __init__(self, Fs, f_n, B, m50.0, g9.8, e50 * 1e-06, rho1e-3):# element parametersBearingParameter {d: 22.2, Dm: 96.987, alpha: 0, z: 8}self.d BearingParameter[d] # ball diameterself.Dm BearingParameter[Dm] # p…

第二篇: 掌握Docker的艺术:深入理解镜像、容器和仓库

掌握Docker的艺术:深入理解镜像、容器和仓库 1. 引言 1.1 简要介绍Docker的重要性 在当今快速发展的技术世界中,软件开发和部署的效率和可靠性是衡量成功的关键因素。Docker,作为一个开源的容器化平台,革新了软件的打包、分发和…

1970python高校教室管理系统mysql数据库Django框架bootstrap布局计算机软件工程网页

一、源码特点 python Django 高校教室管理系统是一套完善的web设计系统mysql数据库 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 python Django 高校教室管理系统 开发环境pycharm mys…

勾八头歌网安之标准ACL、扩展ACL

标准ACL vs 扩展ACL 我是分享我的快乐的终于写完啦!!!!我有时间会把步骤写上来的 也不知有人需要吗哈哈哈 vs

深入了解RSA加密算法

目录 前言 一、什么是RSA? 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代,信息的安全性成为了人们关注…

VUE3脚手架工具cli配置搭建及创建VUE工程

1、VUE的脚手架工具(CLI) 开发大型vue的时候,不能通过html编写一个大型的项目,这个时候需要用到vue的脚手架工具 通过vue的脚手架,可以快速的生成vue工程 1.1、安装nodejs和npm 【下载nodejs】 https://nodejs.org/en 【安装…

厂里资讯之自媒体文章自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后,开始审核文章 2 审核的主要是审核文章的内容(文本内容和图片) 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片,由于图片存储到minIO中&…

Caffe、PyTorch、Scikit-learn、Spark MLlib 和 TensorFlowOnSpark 概述

在 AI 框架方面,有几种工具可用于图像分类、视觉和语音等任务。有些很受欢迎,如 PyTorch 和 Caffe,而另一些则更受限制。以下是四种流行的 AI 工具的亮点。 Caffee Caffee是贾扬青在加州大学伯克利分校(UC Berkeley)时开发的深度学习框架。该工具可用于图像分类、语音和…

UniVue更新日志:SuperGrid组件的使用

github仓库 稳定版本仓库:https://github.com/Avalon712/UniVue 开发版本仓库:https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库:https://github.com/Avalon712/UniVue-SourceGenerator SuperGrid组件的实现…

docker和docker compose 部署

一. 将微服务运行在docker上: 1.新建一个空文件夹docker-demo,在里面再新建文件夹app,在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

UniVue更新日志:使用ObservableList优化LoopList/LoopGrid组件的使用

github仓库 稳定版本仓库:https://github.com/Avalon712/UniVue 开发版本仓库:https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库:https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 如果大家…

C++ | Leetcode C++题解之第160题相交链表

题目: 题解: class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA nullptr || headB nullptr) {return nullptr;}ListNode *pA headA, *pB headB;while (pA ! pB) {pA pA nullptr ? headB : p…

Axios进阶

目录 axios实例 axios请求配置 拦截器 请求拦截器 响应拦截器 取消请求 axios不仅仅是简单的用基础请求用法的形式向服务器请求数据,一旦请求的端口与次数变多之后,简单的请求用法会有些许麻烦。所以,axios允许我们进行创建axios实例、ax…

LeetCode | 344.反转字符串

设置头尾两个指针,依靠中间变量temp交换头尾指针所指元素,头指针后移,尾指针前移,直到头尾指针重合或者头指针在尾指针后面一个元素 class Solution(object):def reverseString(self, s):""":type s: List[str]:r…

Gone框架介绍26 - Gone v1.x 版本 正式发布,更加强大的依赖注入,更加卓越的执行效率

gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 文章目录 优化和新特性gone 核心功能增强内置Goners覆盖测试 后续计划 优化和新特性 gone 核心功能增强 重构了函数参数依…

关于HTTP劫持,该如何理解、防范和应对

一、引言 HTTP劫持(HTTP Hijacking)是一种网络安全威胁,它发生在HTTP通信过程中,攻击者试图通过拦截、篡改或监控用户与服务器之间的数据流量,以达到窃取敏感信息或执行恶意操作的目的。今天我们就来详细了解HTTP劫持…