4
试图使用tengine实现TCP Proxy, 在工作过程中client与server之间必须通过proxy维持tcp长连接
- 测试过程中发现proxy服务的内存消耗持续增长,想请问一下,tengine stream模块在四层代理业务场景下,是否可能存在内存泄漏的问题? 测试环境
- 客户端通过两台普通window pc模拟tcp客户端,分别发起1.5w连接测试
- proxy服务为tengine 四层代理服务(未做任何特殊处理逻辑,直接转发到upstream)
- proxy服务部署环境:
- aliyun ECS服务器 2核4G
- tengine-2.3.2
- Linux version 3.10.0-1062.1.2.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) )
- linux tcp相关参数调整
- rmem_default -> 4096
- wmem_default ->4096
- ip_local_port_range -> 5535 65535
- somaxconn -> 10000
- nginx.conf配置如下:
user root; # daemon off; worker_processes 1;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
error_log /dev/stdout error;events { use epoll; worker_connections 65535; multi_accept on; }
stream { tcp_nodelay on; upstream backend_chash { server 10.0.3.220:30022;
keepalive 1024; }
server {
listen 80 so_keepalive=on;
proxy_socket_keepalive on; #和so_keepalive配合使用
access_log off;
proxy_pass backend_chash;
}
}
- 测试过程记录如下
![image](https://user-images.githubusercontent.com/18020588/77874614-072d2180-7280-11ea-8bf0-24a4a32336c4.png)
![image](https://user-images.githubusercontent.com/18020588/77876315-2a0e0480-7285-11ea-89ca-bb332c310284.png)
- 如此反复断开tcp连接、新建tcp连接流程,内存会持续性增长