服务端上查看tcp链接的创建状况,直接使用netstat命令来统计,看到了不少的time_wait状态的链接.这些状态是tcp链接中主动关闭的一方会出现的状态.该服务器是nginx的webserver监听80端口,搭配的php-fpm监听9000端口,链接其余服务器数据库3960端口,链接其余服务器的memcache 50028端口.php
先查看本机监听80端口的time_wait状态,能够看到不一样客户端的ip端口,来链接个人服务端,而且是我服务端主动关闭链接,所以能够看到time_wait,这些对咱们服务器没有影响.由于这是http的短链接,确定是会请求过来就建立一个链接,请求结束就关闭链接.mysql
网上不少说这些若是太多会占用服务器的端口,根本就是不对的,由于这些是占用的是客户端的端口,服务端只是一个80端口,怎么会占用服务器的端口呢.
netstat -altupn|grep ":80"nginx
固然若是前面有负载均衡的话,客户端IP是固定的几个,能够把前面的负载均衡机器当成是客户端.web
固然若是咱们是经过nginx的反代,反代到fpm的9000端口 , 这个时候是咱们本机随机开启端口,链接本机的9000端口 ,这个时候是会占用本机端口数的sql
还有就是真正占用服务器端口的是,当须要链接数据库时,好比我须要链接数据库的3960端口,这个时候个人服务器会随机占用本机的端口,链接远程的3960端口.由于php链接数据库是使用的短链接,每次请求都会在建立链接,而且是我服务端主动关闭的链接,因此会有大量time_wait状态,这里会占用本机的端口数,链接mc的50028端口也是会出现一样的状况.
netstat -altupn|grep ":3960"数据库
那么若是php使用长链接链接数据库呢?这个时候就是每个fpm子进程建立一个链接,有多少个子进程就会有多少链接,而且链接是不会断掉的.固然若是子进程的数量特别多,会占用mysql的链接数,因此这里咱们的项目里也是使用的短链接.
show variables like 'max_connections'服务器