100万连接测试资料整理

简介: 100万连接测试资料整理

设置相关脚本:

 

默认:

$cat /proc/sys/net/ipv4/ip_local_port_range

32768    61000

 

$cat setting.sh

#/bin/bash

# modify backlog, meanwhile change listen function to 1024, default 128

# echo 1024" > /proc/sys/net/core/somaxconn

sysctl -w net.core.somaxconn = 1024

 

# more ports for testing

sysctl -w net.ipv4.ip_local_port_range="1025 65535"  // 1025 - 6535, about 50000 port avaiable


# tcp read buffer, min, default, maximum

sysctl -w net.ipv4.tcp_rmem="2048 2048 16777216"      // adjust read buffer -> 2k


# tcp write buffer, min, default, maximum

sysctl -w net.ipv4.tcp_wmem="2048 2048 16777216"      // djust write buffer -> 2k, so every socket take about 4k bytes, tested 3.75k.


# tcp  buffer, min, default, maximum, uint = page,page = 4096 byte, we can change the value based on mem

sysctl -w net.ipv4.tcp_mem="1250000 1500000 1750000"  // min 5G, default 6G max 7G, 7G/4K about 175w connections


# tcp

sysctl -w net.ipv4.tcp_max_orphans="200000"          // as large as possible, consider physical mem.


echo 9999999 | tee /proc/sys/fs/nr_open

echo 9999999 | tee /proc/sys/fs/file-max


ulimit -n 9999999


#ulimit -HSn 9999999, setting soft link and hard link


# edit /etc/security/limits.conf, add line, for all user

#* - nofile 9999999

 

这样修改的结果是临时有效,如果系统重启将失效,如果永久生效:

 

echo “net.core.somaxconn = 1024" >> /etc/sysctl.conf

echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf

echo "net.ipv4.tcp_rmem = 2048 4096 16777216" >> /etc/sysctl.conf

echo "net.ipv4.tcp_wmem = 2048 4096 16777216" >> /etc/sysctl.conf

echo "net.ipv4.tcp_mem = 1250000 1500000 1750000" >> /etc/sysctl.conf

echo "net.ipv4.tcp_max_orphans=200000" >> /etc/sysctl.conf


echo "fs.nr_open  = 9999999" >> /etc/sysctl.conf

echo "fs.file-max = 9999999" >> /etc/sysctl.conf

echo "* - nofile 9999999" >> /etc/security/limits.conf

 

测试方式:

 

A 服务端   8G 内存, 服务端启动端口  5050  地址:192.168.1.2

B client  8G 内存, 客户端启动,设置20个ip 地址别名  192.168.1.100 - 192.168.1.120, 批量设置: for i in `seq 100 120`; do sudo ifconfig eth0:$i 192.168.1.$i up ; done

 客户端发送每个ip地址绑定发送 50000, 共 20个 20 * 50000 = 100万

 发送命令:

 1.  ./epoll_cli -s 192.168.1.2 -p 5050 -m -t 192.168.1.99  -n 10 -c 50000   // 绑定 100 - 110,建立50w连接

 2.  ./epoll_cli -s 192.168.1.2 -p 5050 -m -t 192.168.1.109 -n 10 -c 50000  // 绑定 110 - 120,建立50w连接

 

C 使用ACE中的性能测试工具对,多连接情况下进行测试

$ACE_ROOT/performance-tests/TCP/tcp_test -c localhost -i 500000 -b 64 -p 5050

 

代码下载:


https://github.com/DavadDi/blogs/blob/master/epoll_server.tgz

https://github.com/DavadDi/blogs/blob/master/epoll_cli.tgz

 

测试代码使用了log4plush作为日志,如果不使用可以通过删除my_logger拿掉,makefile也需要自己修改一下包含路径,仅供参考。

 

注意:


1 .测试的同时使用dmesg查看系统内核错误

2. 通过 /proc/net/sockstat 查看总体情况,最好不要使用netstat


  $cat /proc/net/sockstat

sockets: used 1000305

TCP: inuse 1000013 orphan 0 tw 0 alloc 1000017 mem 6

UDP: inuse 5 mem 0

UDPLITE: inuse 0

RAW: inuse 0

FRAG: inuse 0 memory 0

 

 

170万连接图: 最后一个窗口为 tail -f /var/log/message,空白表示无错误发生


 

相关资料介绍和总结:

 

详细介绍测试相关资料:

 

1. 100万并发连接服务器笔记之准备篇

http://www.blogjava.net/yongboy/archive/2013/04/09/397559.html

 

2. 100万并发连接服务器笔记之处理端口数量受限问题

http://www.blogjava.net/yongboy/archive/2013/04/09/397594.html

 

3.100万并发连接服务器笔记之测试端就绪

http://www.blogjava.net/yongboy/archive/2013/04/10/397631.html

 

4. 100万并发连接服务器笔记之1M并发连接目标达成

http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html  

Netty 1M相关  http://www.blogjava.net/yongboy/archive/2013/05/13/399203.html

Erlang 1M相关 http://www.blogjava.net/yongboy/archive/2013/04/28/398558.html

 

5. How far epoll can push concurrent socket connection

http://shenfeng.me/how-far-epoll-can-push-concurrent-socket-connection.html

https://github.com/shenfeng/dictionary  epoll 高性能在线词典项目

 

Linux kernel tuning for c500k

http://urbanairship.com/blog/2010/09/29/linux-kernel-tuning-for-c500k

 

A Million-user Comet Application with Mochiweb, Part 3

http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3

 

 

 

iComet 相关, 可以参考用来做推送服务器


iComet 是一个使用 C++ 语言开发的支持百万并发连接的 comet/push 服务器, 支持百万级并发连接

https://github.com/ideawu/icomet

 

构建C1000K的服务器(1) – 基础

http://www.ideawu.net/blog/archives/740.html

 

构建C1000K的服务器(2) – 实现

http://www.ideawu.net/blog/archives/742.html

 

TCP长连接的思考和相关问题的实验_百万链接数测试_百万链接内核参数的调整

http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520138128552553/

 

Troubleshooting the "Out of socket memory" error

http://kaivanov.blogspot.jp/2013/01/troubleshooting-out-of-socket-memory.html

 

Linux Increase the maximum number of open file

http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

 

Linux TCP/IP tuning

http://www.lognormal.com/blog/2012/09/27/linux-tcpip-tuning/

 

标签: 100万连接内核参数调整 epoll测试代码

目录
相关文章
|
4月前
|
安全 网络安全 数据安全/隐私保护
解决SSH测试连接GitHub时出现“connection closed by remote host”的问题。
然后使用 `ssh -T git@ssh.github.com`来测试连接。
539 0
|
9月前
|
druid Java 数据库连接
【YashanDB 知识库】druid 连接池做断网测试,无法自动重新连接
【YashanDB 知识库】druid 连接池做断网测试,无法自动重新连接
|
9月前
|
druid Java 数据库连接
【YashanDB知识库】druid连接池做断网测试,无法自动重新连接
【YashanDB知识库】druid连接池做断网测试,无法自动重新连接
|
9月前
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。
|
关系型数据库 MySQL 数据库
6-2|测试连接数据库的命令
6-2|测试连接数据库的命令
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis
313 1
|
网络协议 Ubuntu
百万并发连接的实践测试01
百万并发连接的实践测试01
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
813 0
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之如何解决测试连接时出现2003-Can't connect的问题
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
273 0