.NET Socket TCP 50W在线连接交互测试
在平常的交流中经常有人问.net socket能支持多少在线?和C++或linux下比起来应该差很远吧?其实产生这样问题的主要原因是.net很少人去做这方面的测试,而在linux下则经常听到什么100w或500w在线连接的测试.这样一个数字看起来多么地让人兴奋...其实在这几年编写通讯服务的过程中已经意识到连接数的多少对整体影响并不大,主要归功于现有成熟悉的网络模型和硬件资源.为了更进一步证实这个问题,所以打算在.NET下测试一下100w连接交互情况,不过由于硬件内存不足不能进行100W连接量,因此只能跑个50W在线的效果.
测试硬件数量有限和IP端口的限制,为了满足这一次的测试需要只好一台机上添加多个IP...
给测试的Client电脑添加了10个IP,每个IP分别绑定10000-60000端口,而测试程序针对每个IP构建一个线程来创建连接,连接创建完成后就定量轮循连接向服务器发送消息.
测试程序
static void Connect(object state)
{
string ipaddress = (string)state;
System.Net.IPAddress ip = System.Net.IPAddress.Parse(ipaddress);
for(int i=10000;i<60000;i++)
{
try
{
Socket mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mSocket.Bind(new System.Net.IPEndPoint(ip, i));
mSocket.Connect(mHost, mPort);
SocketAsyncEventArgs sae = new SocketAsyncEventArgs();
sae.SetBuffer(new byte[1024], 0, 1024);
sae.UserToken = mSocket;
sae.Completed += OnReceive;
BeginReceive(mSocket, sae);
lock (mSockets)
{
mSockets.Add(mSocket);
}
}
catch (Exception e_)
{
Console.WriteLine("create socket client error {0} with {1}@{2}", e_.Message, ipaddress, i);
}
System.Threading.Thread.Sleep(1);
}
while (true)
{
for (int i = 0; i < 20; i++)
{
long index = System.Threading.Interlocked.Increment(ref mIndex);
mSockets[(int)(index % mSockets.Count)].Send(Encoding.UTF8.GetBytes("{\"name\":\"henryfan\"}"));
}
System.Threading.Thread.Sleep(1);
}
}
代码程序比较简单,每次获取20个连接进行数据发送,每次发送完后sleep一次,这样主要是为了防止资源被用光导致测试无法进行;毕竟这一次的测试是以连接数量为基准.
测试结果
整个测试结果和我想的没有多大的出入,构建50W连接后由于数据交互量不大,所以除了占用比较多的内存以外基本没有对服务器CPU构成压力.
50W连接整个交互大概是每秒1.2w的请求应答量.由于连接太多在超过十几W连接的情况下netstat已经无法正常显示该端口对应的连接数量了....;虽然连接数量比较多但程序所占用的CPU资源并不高
CPU的平均占用率大概在7%左右.
服务端的内存占用率大概在2.6G左右,实际操作系统的内存已经满了.
总结
由于内存的限制在这些测试中不能跑到100w个连接有点可惜(不过以后闲着的时候把内存加上去后还会无聊地再刷一次)...;从结果已经可以进一步说明了一个非常重要的问题,只从连接数上来衡量一个服务的能力是没有多大意义.只有请求应答量才能体现出服务端的性能优势.所以当你看到100W连接的测试文章不感到惊叹,毕竟请求应答量才是体现性以指数.如果有兴趣的同学其电脑内存资源充足的情况可以做出更高的连接数出来,为了方便测试便顺提供测试程序.
/files/file/20140907/20140907145550_4695.rar
从windows的配置表信息来看,最大连接数是1K多W的连接数,如果你的内存资源足够看能冲到多少,别忘了把结果分享出来.
.NET Socket TCP 50W在线连接交互测试的更多相关文章
- 关于socket tcp 断线重连
这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
- 探讨.net Socket支持在线连接数量
发现不少同学在用.NET做通讯的时候都关心一个问题,.NET能支持多少个在线连接.其实.net的通讯由winsocket所支持,既然由低层的winsocket所支持那.NET其端的接入连接数的受限完全 ...
- (转)JAVA socket 进行十六进制报文交互测试
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io. ...
- Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结
Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...
- 运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接 最近在项目中可能要用到socket相关的东西来发送消息,所以初步研究了下socket的TC ...
- 从Linux源码看Socket(TCP)的listen及连接队列
从Linux源码看Socket(TCP)的listen及连接队列 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就来从Linux源码的角度看 ...
- Socket/TCP粘包、多包和少包, 断包
转发: https://blog.csdn.net/pi9nc/article/details/17165171 为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个 ...
- TODO:Golang UDP连接简单测试慎用Deadline
TODO:Golang UDP连接简单测试慎用Deadline UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interco ...
随机推荐
- oracle必须启动哪些服务?
对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_ho ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- 微信 网页授权获取用户基本信息(OAuth 2.0)
// 相关设置 $APPID = ""; $AppSecret = ""; $html = ""; // 拼接 URL // 跳转该连接 获 ...
- java中多线程中Runnable接口和Thread类介绍
java中的线程时通过调用操作系统底层的线程来实现线程的功能的. 先看如下代码,并写出输出结果. // 请问输出结果是什么? public static void main(String[] args ...
- delphi Inc函数和Dec函数的用法
inc自增函数 .inc(i,n)://i,n:integer;n为自增量 相当于i:=i+n: .inc(i)://i:integer; 相当于i:=i+; dec自减函数 .dec(i,n): ...
- Oracle Database 11G R2 标准版 企业版 下载地址(转)
转自:http://blog.itpub.net/628922/viewspace-759245/ 不需要注册,直接复制到迅雷或其他下载软件中即可下载. oracle 11.2.0.3 下载地址: L ...
- 【软件工程】用map 实现把英语文本文件词和个数打印出来
#include <iostream> #include <fstream> #include <string> #include <map> usin ...
- How to Shorten the Paper
. Remember: you are writing for an expert. Cross out all that is trivial or routine. . Avoid repetit ...
- lucene源码地址
http://archive.apache.org/dist/lucene/java/
- iOS定位到崩溃代码行数
不知道大家是不是在代码调试过程中经常遇到项目崩溃的情况: 比如: 数组越界: 没有实现方法选择器: 野指针: 还有很多很多情况.......昨天学到了一种可以直接定位到崩溃代码行数的一个命令,记录一下 ...