nginx+php压测及报错优化

测试环境:虚拟机centos7,nginx+php

压测工具:Apipost

访问的php程序中添加sleep()增加程序执行时长,使用Apipost进行压测,根据服务器配置设置一个大概可能触发报错的并发和轮训次数,若无报错逐渐增加并发和次数,同时监测nginx错误日志,触发报错。

1.压测报错:recv( )failed (104: Connection reset by peer) while reading response header from upstream

优化方案:

①关闭selinux,编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,保存并退出,重启服务器(修改完下面第②条再一块重启吧)使其生效。如果改错了,重启卡在了进度条,参考文档:因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)-CSDN博客

别问我怎么知道的

②编辑/etc/sysctl.conf文件添加如下配置:

net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1024
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

什么意思?

看了文章也不是全部理解,所以自己研究,说不定有自己的心得。

③有的文章对该报错说编辑nginx.conf添加或增大buffer大小:

    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

这里的值根据服务器配置和业务量情况进行调整,不过后续测试把这里去掉也不会报104错误,所以仅供参考

做完以上修改后,再次使用Apipost没有再次报104错误了,这里说的是相同或稍微增大压测量的情况,不排除大幅度增加并发请求量仍会出现104报错的可能。

2.压测报错2:upstream time out (110: Connection timed out) while reading response header from upstream

该110报错有时候伴随着上面的104出现,也可能单独出现。

针对该报错进行了如下测试:

### 测试情况1:

Php-fpm配置pm.max_children=50,

nginx配置:

fastcgi_connect_timeout 10;

fastcgi_read_timeout 60;

压测工具Apipost,测试300并发,轮循5次,

Nginx110报错数:579

### 测试情况2:

Php-fpm配置pm.max_children=100,

nginx配置:

fastcgi_connect_timeout 10;

fastcgi_read_timeout 60;

压测工具Apipost,测试300并发,轮循5次,

Nginx110报错数:238

### 测试情况3:

Php-fpm配置pm.max_children=100,

nginx配置:

fastcgi_connect_timeout 30;

fastcgi_read_timeout 60;

压测工具Apipost,测试300并发,轮循5次,

Nginx110报错数:0

这里的请求失败数和错误率不一定是程序报错,下面再讲解,检测nginx报错日志是没有报错的。

测试总结:

(110: Connection timed out)字面意思就是连接超时,通过以上测试大概能理解,出现该报错应该是php-fpm进程已达到最大值且已被占满,并且后续大量请求堆积无法在fastcgi_connect_timeout 设置的时间内抢占到php-fpm进程资源导致的超时报错,所以测试2增大了php进程数,提高了请求的消费能力在一定程度上减少了请求堆积情况,而测试3增大了fastcgi_connect_timeout的值,这就给等待处理的请求更宽裕的时间去连接php-fpm进程,提高了容错能力。这个数值肯定不是越大越好,这会增加这些请求的整个响应周期的时长(错误响应也是响应),长时间处于过长时间的等待连接就已经表明需要提高服务进程数或着提高服务器配置了,同时超长时间的请求响应到用户这里可能早就已经不需要或被丢弃了,同时还占用着本来就已经紧张的服务器资源,可以说是雪上加霜。在服务器资源充足的情况的可以通过增加服务进程来提升请求处理能力,在服务器资源枯竭的情况就应该考虑提升服务器配置,如果提升配置到一定瓶颈仍处理不过来,就需要考虑增加服务器数量了。

3.就Apipost失败请求数问题测试。

在上述测试情况3的条件再次压测:

查看nginx访问日志,发现499响应码:

统计499数量:grep "499" access.log | wc -l

刚好7,对应Apipost失败请求数,

搜索http 499状态码:

应该属于Apipost自己的超时策略,主动切断请求导致的499,被视为失败请求。

结合测试2、测试3也刚好应验了把fastcgi_connect_timeout 扩大,会降低nginx报错,但是会拉长这些请求的整个请求周期的时间,在Apipost可能会因为超时被视为失败请求,而结果是失败率变大。

###校验499触发

将nginx配置fastcgi_read_timeout 120;

Php代码中添加sleep(100);

ApiPost压测缩减为10并发2轮

同时用浏览器访问接口

Apipost只耗时40s结束,全部失败,错误率100%

Nginx访问日志全为499响应码

反观浏览器则等待100s返回正常结果,nginx日志也是200响应码

所以apipost压缩应该是有一定的超时策略的,按上述结果应该每个请求超过20s未响应视为失败。

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

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

相关文章

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…

AOSP的同步问题

repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法: 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…

Shell脚本小练习

学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…

k8s Init:ImagePullBackOff 的解决方法

kubectl describe po (pod名字) -n kube-system 可查看pod所在的节点信息 例如&#xff1a; kubectl describe po calico-node-2lcxx -n kube-system 执行拉取前先把用到的节点的源换了 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"re…

Git 快速入门:全面了解与安装步骤

Git 快速入门&#xff1a;全面了解与安装步骤 一、关于Git 1.1 简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年创建&#xff0c;最初是为了更好地管理 Linux 内核开发而设计。 Git用于跟踪计算机文件的变化&#xff0c;特别是源代码文件…

springboot358智慧社区居家养老健康管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 智慧社区居家养老健康管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&…

探索 IntelliJ IDEA 中 Spring Boot 运行配置

前言 IntelliJ IDEA 作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为 Spring Boot 应用提供了丰富的运行配置选项&#xff0c;定义了如何在 IntelliJ IDEA 中运行 Spring Boot 应用程序&#xff0c;当从主类文件运行应用程序时&#xff0c;IDE 将创建…

快速讲图片中的公式粘贴到word中

只是个人学习记录&#xff0c;不具备教学意义 目的&#xff1a; 比如下面图片中的公式 我们想把这个公式整到我们的word上&#xff0c;传统的方法是通过安装MathType插件&#xff0c;然后慢慢打。我说这样你就慢了。 解决办法&#xff1a; 前提准备&#xff1a; 我们需要…

【STM32+HAL】FreeRTOS学习小札

一、RTOS程序任务结构 如上图所示&#xff0c;在实时操作系统中&#xff0c;开发人员可以把要实现的功能划分为多个任务&#xff0c;每个任务负责实现其中的一部分&#xff0c;每个任务都是一个很简单的程序&#xff0c;通常是一个死循环。 二、多任务系统基本概念 1、FreeRTO…

复杂网络(四)

一、规则网络 孤立节点网络全局耦合网络&#xff08;又称完全网络&#xff09;星型网络一维环二维晶格 编程实践&#xff1a; import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…

安规题库;安全测试题;安规刷题;大风车excel

一、电网安规题库、试题 安规真的是年年考&#xff0c;天天背&#xff0c;时不时抽考 往往需要利用上下班的零碎时间来练习和记忆 分享一套电网真题、原题&#xff08;150道选择题&#xff09; 上面的试题&#xff0c;我已经导入到刷题工具&#xff08;大风车excel&#xff…

ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想

目录 主要是包含搜推广系统的基本模块简单介绍&#xff0c;另有一些流程、设计思想的分析。 搜索引擎 基本模块检索流程 查询分析查询纠错 广告引擎 基于标签倒排索引召回基于向量ANN检索召回打分机制&#xff1a;非精确打分精准深度学习模型打分索引精简&#xff1a;必要的…

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测&#xff0c;含优化前后对比 目录 BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测&#xff0c;含优化前后对比预测效果基本介绍模型描述程序设计…

Matlab Simulink HDL Coder FPGA开发初体验—计数器

目录 一、Simulink设计及仿真二、Verilog HDL代码转换1、参数配置2、HDL代码生成 三、ModelSim仿真分析1、使用自己编写的Testbench文件进行仿真2、使用HDL Coder生成的Testbench文件进行仿真 前言 Simulink HDL Coder‌是一款将Simulink和Stateflow模型转化为可综合的Verilog和…

RAG数据拆分之PDF

引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容 引言 本文将介绍如何将RAG数据拆分至PDF格式&#xff0c;并探讨PDF解析的方法和工具&#xff0c;最后提供代码示例。 RAG数据简介 RAG&#xff08;关系型属性图&#xff09;是一种用于表示实体及其关系的图数据…

Postman设置接口关联,实现参数化

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这…

不玩PS抠图了,改玩Python抠图

网上找了两个苏轼的印章图片&#xff1a; 把这两个印章抠出来的话&#xff0c;对于不少PS高手来说是相当容易&#xff0c;但是要去掉其中的水印&#xff0c;可能要用仿制图章慢慢描绘&#xff0c;图章的边缘也要慢慢勾画或者用通道抠图之类来处理&#xff0c;而且印章的红色也不…

构造函数与析构函数错题汇总

构造函数不能定义返回类型&#xff0c;也没有返回类型。 堆、栈、静态存储区。栈上的对象main函数结束就释放&#xff0c;堆上的需要手动释放&#xff0c;静态存储区的在所在作用域的程序结束时释放。这里static在main函数内&#xff0c;是局部变量&#xff0c;所以作用域为…

模拟器快速上手,助力HarmonyOS应用/服务高效开发

文章目录 1 创建模拟器1&#xff09;打开设备管理界面2&#xff09;设置本地模拟器实例存储路径3&#xff09;创建一个模拟器&#xff08;1&#xff09;选择模拟器设备&#xff08;2&#xff09;创建模拟器&#xff08;3&#xff09;启动模拟器&#xff08;4&#xff09;关闭模…

如何估算自然对流传热系数

介绍 一般来说&#xff0c;对流可以定义为通过加热流体&#xff08;例如空气或水&#xff09;的运动来传递热量的过程。 自然对流&#xff08;对流的一种特定类型&#xff09;可以定义为流体在重力作用下由于较热因此密度较小的物质上升&#xff0c;而较冷且密度较大的物质下…