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测试代码

目录
相关文章
|
1月前
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis
29 1
|
1月前
|
运维 DataWorks 关系型数据库
DataWorks操作报错合集之出现报错导致测试环境可以正常连接,但生产环境无法连接,是什么情况
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之如何解决测试连接时出现2003-Can't connect的问题
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
1月前
|
数据采集 SQL 分布式计算
DataWorks操作报错合集之在执行离线同步时,如果测试连接突然报错并出现类似于“exception occurs:path=[/di/testDetailConnectivity]”,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版操作报错之连接外部kafka本地执行测试代码报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
传感器
LabVIEW编程LabVIEW开发控制PACE1000精密压力测试仪例程与相关资料
LabVIEW编程LabVIEW开发控制PACE1000精密压力测试仪例程与相关资料
22 0
|
2月前
|
传感器 编解码 算法
2021-07-20LabVIEW编程LabVIEW开发 控制Dantec 激光多普勒测试仪LDV例程与相关资料
2021-07-20LabVIEW编程LabVIEW开发 控制Dantec 激光多普勒测试仪LDV例程与相关资料
28 0
|
2月前
|
传感器 编解码
LabVIEW编程LabVIEW开发 控制RITEC RAM-5000 SNAP非线性高能超声测试系统例程与相关资料
LabVIEW编程LabVIEW开发 控制RITEC RAM-5000 SNAP非线性高能超声测试系统例程与相关资料
35 0
|
2月前
|
Java 测试技术 数据库
【SpringBoot】连接数据源并回显(附加单元测试)
【SpringBoot】连接数据源并回显(附加单元测试)
21 0