网站首页 > 技术教程 正文
nginx是IT工程师常用的组件,nginx有很多功能,其中一项就是可以将请求反向代理至后端的服务器来进行具体的逻辑处理,完成之后再由nginx将结果返回给客户端。
正常实验
接下来我们通过实验来得到结论
实验思路
对nginx + php 环境的一个简单脚本进行压力测试,压力测试的过程中同时检查 nginx服务器、php服务器 9000端口的使用情况,得出最后的结论。
实验脚本
test.php
<?php
var_dump("Hello Word!");
?>
压力测试
ab -c 100 -n 10000 http://localhost/test.php
网络监控
在nginx和php服务器上分别执行以下命令,获取网络连接的状态
netstat -anpt | grep :9000
nginx网络连接状态
PHP网络连接状态
以上两个图的红框部分为nginx进程与php进程网络通信中使用的nginx服务器的IP和端口,我本地的nginx进程有 1 个、php-fpm进程最大 5 个,如此多的端口足以证明:nginx中fastcgi与php-fpm进程的网络通信为短连接。
TCP主动关闭方与被动关闭方的思考
上面实验压力测试的结果为:
红框部分为请求失败的数量。我们的结果为 0,这个结果表明所有的请求都是正常的,没有发生 502 或 504 的现象。
此时观察上面nginx、php服务器的截图,网络连接状态一栏。
nginx状态为 CLOSE_WAIT、LAST_ACK。表明nginx端的网络连接为TCP被动关闭方。
PHP状态为 TIME_WAIT。表明php端的网络连接为TCP主动关闭方。
异常实验
生产环境中我们也偶尔会碰到nginx的网络状态出现 FIN_WAIT1、FIN_WAIT2 这种主动关闭方的状态;同时PHP的网络状态出现 CLOSE_WAIT 的这种被动关闭方的状态。我们通过实验来复现一下这个结果。
测试脚本
<?php
var_dump("Hello Word!");
sleep(3);
?>
压力测试
ab -c 100 -n 100 http://localhost/test.php
压力测试结果
上图红框内失败的请求为 44 个。
网络截图
在nginx和php服务器上分别执行以下命令,获取网络连接的状态
netstat -anpt | grep :9000
nginx网络连接状态
nginx网络链接出现主动关闭状态 FIN_WAIT2。
php网络连接状态
php网络连接出现被动关闭状态 CLOSE_WAIT。
原因
当服务器压力过大的时候(以上我们用sleep模拟慢接口),php-fpm处理不过来nginx服务器发送过来的请求。nginx中fastcgi有请求的超时处理机制,fastcgi中的请求如果在等待php-fpm响应的过程中没有在超时前得到结果,就会发送 Fin包 给php-fpm保持的网络请求端,关闭连接,所以这时候nginx服务器上的网络请求就会成为网络连接的主动关闭方,所以出现 FIN_WAIT2 状态。
猜你喜欢
- 2024-10-11 浅谈从PHP迁移至Golang(基础篇)(php传值到另一个php)
- 2024-10-11 相同逻辑的php与golang代码效率对比,最好语言落谁家…
- 2024-09-21 Promethues如何监控PHP(prometheus snmp监控)
- 2024-09-21 蓝易云 - 在centos中配置nginx+php的环境教程。
- 2024-09-21 Zabbix运维—监控php-fpm、redis服务
- 2024-09-21 Zabbix 5.2由浅入深之监控php-fpm
- 2024-09-21 PHP-FPM实现性能优化的方法(php-fpm 优化)
- 2024-09-21 PHP-FPM高负载的解决办法(php高负载解决方案)
- 2024-09-21 php-fpm的配置和优化(php-fpm调优)
- 2024-09-21 docker中运行php文件(docker php fpm)
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)