webman框架时当下最热门的PHP框架之一,但是往往我们在使用过程中难免会遇到各种各样的问题,特此在本文章内给大家给到解决方案以供参考。
取消禁用函数: putenv 、exec、system 、shell_exec 、pcntl_fork、pcntl_signal、pcntl_alarm、pcntl_signal_dispatch、shell_wait
出错现象: stream_socket_server(): Unable to connect to tcp://0.0.0.0:8787 (Address already in use)
netstat -tln | grep 8787
tcp 0 0 0.0.0.0:8787 0.0.0.0:* LISTEN 23621/WorkerMan: wo
lsof -i:8787
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 23621 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23622 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23623 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23624 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23625 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23626 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
php 23627 root 4u IPv4 810227978 0t0 TCP *:msgsrvr (LISTEN)
kill -9 PID
出错现象: dial tcp xx.xx.xx.xx:10101: connect: Cannot assign requested address
原因: 这种情况一般发生在高并发服务器上或者压测时会出现。
每个socket链接会占用本地一个端口,短链接使用毕后会立刻关闭,这时链接处于TIME_WAIT状态,本地的端口仍然被占用着。本地端口最多为6W个,如果在短时间内建立的大量的TCP短链接,本地端口会被TIME_WAIT迅速耗光,导致Cannot assign requested address
# 1、编辑系统配置文件
vi /etc/sysctl.conf
# 2、添加开启端口快速回收配置
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# 3、执行配置
sysctl -p
vi /etc/sysctl.conf
# 修改linux端口分配范围
net.ipv4.ip_local_port_range = 10000 65000
sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
# 修改timewait状态的存在时长
sysctl net.ipv4.tcp_fin_timeout = 30
sudo sysctl -w net.ipv4.tcp_fin_timeout=30
# 修改timewait最大值
net.ipv4.tcp_max_tw_buckets = 40000
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=40000
sysctl -p