经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
[PHP] time_wait与长连接短连接
来源:cnblogs  作者:陶士涵  时间:2019/11/6 8:52:38  对本文有异议

服务端上查看tcp连接的建立情况,直接使用netstat命令来统计,看到了很多的time_wait状态的连接.这些状态是tcp连接中主动关闭的一方会出现的状态.该服务器是nginx的webserver监听80端口,搭配的php-fpm监听9000端口,连接其他服务器数据库3960端口,连接其他服务器的memcache 50028端口.

 

先查看本机监听80端口的time_wait状态,可以看到不同客户端的ip端口,来连接我的服务端,并且是我服务端主动关闭连接,因此可以看到time_wait,这些对我们服务器没有影响.因为这是http的短连接,肯定是会请求过来就创建一个连接,请求结束就关闭连接.

网上很多说这些如果太多会占用服务器的端口,根本就是不对的,因为这些是占用的是客户端的端口,服务端只是一个80端口,怎么会占用服务器的端口呢.
netstat -altupn|grep ":80"

 

 当然如果前面有负载均衡的话,客户端IP是固定的几个,可以把前面的负载均衡机器当成是客户端.

 

当然如果我们是通过nginx的反代,反代到fpm的9000端口 , 这个时候是我们本机随机开启端口,连接本机的9000端口 ,这个时候是会占用本机端口数的

 

 

 

还有就是真正占用服务器端口的是,当需要连接数据库时,比如我需要连接数据库的3960端口,这个时候我的服务器会随机占用本机的端口,连接远程的3960端口.因为php连接数据库是使用的短连接,每次请求都会在创建连接,并且是我服务端主动关闭的连接,所以会有大量time_wait状态,这里会占用本机的端口数,连接mc的50028端口也是会出现同样的情况.
netstat -altupn|grep ":3960"

 

 

那么如果php使用长连接连接数据库呢?这个时候就是每一个fpm子进程创建一个连接,有多少个子进程就会有多少连接,并且连接是不会断掉的.当然如果子进程的数量特别多,会占用mysql的连接数,所以这里我们的项目里也是使用的短连接.
show variables like 'max_connections'

 

原文链接:http://www.cnblogs.com/taoshihan/p/11801085.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号