golang,redigo 使用中 Cannot assign requested address的解决办法
2017-08-25 18:57
831 查看
go使用redigo建立redis连接池处理高流量数据缓存
情景:
高并发,高流量,分布式
问题:
“Cannot assign requested address.”是由于Linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。
解决:
1.高并发情况下,调高MaxIdle (根据qps自行计算)
2.减少defer使用
3.减少程序中无效内存使用,连接使用完毕后快速释放
4.tcp释放时间,减小。修改 linux配置文件调整,调低time_wait状态端口等待时间:
1. 调低端口释放后的等待时间,默认为60s,修改为15~30s
sysctl -w net.ipv4.tcp_fin_timeout=30
2. 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
sysctl -w net.ipv4.tcp_timestamps=1
3. 修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
sysctl -w net.ipv4.tcp_tw_recycle=1
修改参数:
$ vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 10000 65000 -----意味着10000~65000端口可用
改完后,执行命令“sysctl -p”使参数生效,不需要reboot。
情景:
高并发,高流量,分布式
问题:
“Cannot assign requested address.”是由于Linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。
解决:
1.高并发情况下,调高MaxIdle (根据qps自行计算)
2.减少defer使用
3.减少程序中无效内存使用,连接使用完毕后快速释放
4.tcp释放时间,减小。修改 linux配置文件调整,调低time_wait状态端口等待时间:
1. 调低端口释放后的等待时间,默认为60s,修改为15~30s
sysctl -w net.ipv4.tcp_fin_timeout=30
2. 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
sysctl -w net.ipv4.tcp_timestamps=1
3. 修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
sysctl -w net.ipv4.tcp_tw_recycle=1
修改参数:
$ vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 10000 65000 -----意味着10000~65000端口可用
改完后,执行命令“sysctl -p”使参数生效,不需要reboot。
相关文章推荐
- Cannot assign requested address的解决办法
- Cannot assign requested address解决办法
- java.net.BindException: Cannot assign requested address: JVM_Bind:8080解决办法
- Cannot assign requested address解决办法
- Cannot assign requested address的解决办法
- Cannot assign requested address的解决办法
- Cannot assign requested address的解决办法
- Cannot assign requested address的解决办法
- DataNode启动不成功——java.net.BindException: Port in use: localhost:0 Caused by: java.net.BindException: Cannot assign requested address解决办法
- Redis:Cannot assign requested address的解决办法
- Cannot assign requested address以及大量的TIME_WAIT解决办法
- Cannot assign requested address的解决办法
- Cannot assign requested address的解决办法
- Cannot assign requested address的解决办法
- Dubbo广播模式下报错:Can't assign requested address解决办法
- tomcat java.net.BindException: Cannot assign requested address 解决方法
- Tomcat出现 Cannot assign requested address的解决方法
- php连接memcahed出现Cannot assign requested address (99)的解决方法
- php连接memcahed出现Cannot assign requested address (99)的解决方法
- redis数据导出,报错Could not connect to Redis at ip:port: Cannot assign requested address解决方法