一 概述

  • Socket服务器性能要好就要经过无数次的测试,来保证,以下是记录一次的测试经过。
  • 机器配置:Inter(R) Core(TM) i3-2310m CPU 2.10GHz RAM 6.00GB,64位系统
  • 今天的测试主要是5个客服端连接和连续发送2000数据包,每个包大概在55192大小。

二 测试准备工作

 

在测试之前需要准备哪些呢。

启动多客服端.bat 代码如下:

@echo off
echo 请稍等......
for /l %%i in (1,2,12) do  start HLAsySocketClient.exe %%i
echo 完毕!

 

三 开始测试

 

第一步我们先配置好相关的配置启动一个Socket服务如下配置

<?xml version="1.0" encoding="gb2312" ?>
<socketServer  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <servers>
    <server Disabled="" bufferSize="" maxConnectionNumber="" />
    <server serviceName="" bufferSize="" maxConnectionNumber="" />
    <server serviceName="" bufferSize="" maxConnectionNumber="" />
  </servers>
</socketServer>

HLAsySocketServer.exe.config配置相关的目前把数据库相关的配置先存放在这里,还有运行时目录的查找。

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="server" value="LUOMG-PC"/>
    <add key="uid" value="sa"/>
    <add key="pwd" value="123456"/>
    <add key="db" value="3983"/>
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Servers"/>
    </assemblyBinding>
  </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

第二步启动Socket服务 如下:

目前只能显示连接数,缓冲区还没有开发所以还不能显示。

第三步启动启动多客服端.bat 如下:

HLAsySocketClient.exe 在启动的时候连接到服务器端。

全部启动完成并且DataGrid里有数据也就是说连接成功,并第一次向服务器发送请求,并回报成功了。

第四步,我们逐个点击客服端的测试按钮,旁边文本框显示的是向服务发送请求的次数,lab里是成功回报的次数,如上图。

一共启动了5个客服端,每个客服端连续向服务器发送2000次请求,也就是10000次。

 

四 测试结果

 

我们先来看一下SystemLog文件夹生成了那些文件

里有错误日志,性能日志,一般性日志。

生成日志对应的代码,如下

public class DeviceSocket : ICommand<AsyncSocketSession>
    {
        public void ExecuteCommand(AsyncSocketSession session, SocketSendData commandData)
        {
            Device dev = new Device();
            if ("list".Equals(commandData.StrMessage, StringComparison.OrdinalIgnoreCase))
            {
              DataTable dt = dev.GetList("").Tables[0];
              commandData.ObjMessage = dt;
            }
            else if ("add".Equals(commandData.StrMessage, StringComparison.OrdinalIgnoreCase))
            { 

            }
            session.SendResponse("", commandData);
            LogManage.AddActionLog(string.Format("BusinessLogicLayer.SocketCommand 业务对象 {0} 业务类型 {1} ",this.GetType().Name,commandData.StrMessage));
        }
    }

也就是说这个日志是业务处理完,并反馈给客服端,后成功的日志了。

在错误日志文件里面发现了很多:

==============================================

[2013-7-17 22:19:59]:System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。

   在 System.Text.StringBuilder.ToString()

   在 System.IO.StringWriter.ToString()

   在 System.Data.DataSet.GetRemotingDiffGram(DataTable table)

   在 System.Data.DataTable.SerializeDataTable(SerializationInfo info, StreamingContext context, Boolean isSingleTable, SerializationFormat remotingFormat)

   在 System.Data.DataTable.GetObjectData(SerializationInfo info, StreamingContext context)

   在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)

   在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)

   在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)

   在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)

   在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)

   在 HLAsySocket.Serialization.BinaryFormatterWrapper.Serialze(Object obj)

   在 HLAsySocket.SocketTreaty.OrganizeTreaty(String strData, SocketSendData objData)

   在 HLAsySocket.AsyncSocketSession.SendResponse(String strData, SocketSendData objData)

   在 BusinessLogicLayer.SocketCommand.DeviceSocket.ExecuteCommand(AsyncSocketSession session, SocketSendData commandData)

   在 HLAsySocket.AsyncSocketSession.ExecuteCommand(SocketSendData cmdInfo)

   在 HLAsySocket.AsyncSocketSession.ProcessReceive(MySocketAsyncEventArgs e)

==============================================

性能日志如下:

[2013-7-17 22:12:54]:---------------------------------------------------

CPU Usage: 0.00%, Physical Memory Usage: 49,524,736.00, Total Thread Count: 13

AvailableWorkingThreads: 1021, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:13:24]:---------------------------------------------------

CPU Usage: 23.22%, Physical Memory Usage: 402,817,024.00, Total Thread Count: 25

AvailableWorkingThreads: 1019, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:13:54]:---------------------------------------------------

CPU Usage: 38.94%, Physical Memory Usage: 828,608,512.00, Total Thread Count: 28

AvailableWorkingThreads: 1018, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:14:24]:---------------------------------------------------

CPU Usage: 35.66%, Physical Memory Usage: 1,123,102,720.00, Total Thread Count: 26

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:14:54]:---------------------------------------------------

CPU Usage: 27.43%, Physical Memory Usage: 1,332,174,848.00, Total Thread Count: 26

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:15:24]:---------------------------------------------------

CPU Usage: 23.68%, Physical Memory Usage: 1,523,118,080.00, Total Thread Count: 23

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:15:54]:---------------------------------------------------

CPU Usage: 25.20%, Physical Memory Usage: 1,654,398,976.00, Total Thread Count: 23

AvailableWorkingThreads: 1016, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:16:24]:---------------------------------------------------

CPU Usage: 25.25%, Physical Memory Usage: 1,654,448,128.00, Total Thread Count: 22

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:16:54]:---------------------------------------------------

CPU Usage: 31.06%, Physical Memory Usage: 1,654,358,016.00, Total Thread Count: 20

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:17:24]:---------------------------------------------------

CPU Usage: 30.66%, Physical Memory Usage: 1,654,378,496.00, Total Thread Count: 20

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:17:54]:---------------------------------------------------

CPU Usage: 33.64%, Physical Memory Usage: 1,654,394,880.00, Total Thread Count: 20

AvailableWorkingThreads: 1017, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:18:24]:---------------------------------------------------

CPU Usage: 34.98%, Physical Memory Usage: 1,654,403,072.00, Total Thread Count: 20

AvailableWorkingThreads: 1019, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:18:54]:---------------------------------------------------

CPU Usage: 33.10%, Physical Memory Usage: 1,654,484,992.00, Total Thread Count: 21

AvailableWorkingThreads: 1019, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:19:25]:---------------------------------------------------

CPU Usage: 38.04%, Physical Memory Usage: 1,654,562,816.00, Total Thread Count: 23

AvailableWorkingThreads: 1019, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:19:54]:---------------------------------------------------

CPU Usage: 38.59%, Physical Memory Usage: 1,654,542,336.00, Total Thread Count: 22

AvailableWorkingThreads: 1019, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

[2013-7-17 22:20:24]:---------------------------------------------------

CPU Usage: 5.80%, Physical Memory Usage: 1,654,280,192.00, Total Thread Count: 14

AvailableWorkingThreads: 1021, AvailableCompletionPortThreads: 1000

MaxWorkingThreads: 1023, MaxCompletionPortThreads: 1000

==============================================

查看Windows任务管理器:

 

五 后续工作

 

根据以下的测试结果,还有很长的一段路要走啊。

性能相关:

1:CPU过高,内存过高,把CPU和内存全部消耗完了。

2:查询了10000多次的数据库,在这里需要加入缓存,以减少一点消耗。

3:多个客服端连续发送相对大的数据量,处理太慢,好多都卡着不走了。

4:有时候会出现丢包,粘包 现象,数据包解析不过直接报数据解析错误,在这里需要加入一个发送队列会不会好一点。

5:加入发送超时,接收超时机制。但是如果设置是3秒超时,而执行数据库操作要5秒完成那不是???!!!!。

6:以上功能加完在这个测试基础上在加一个客服端专门做连接关闭操作来干扰其他客服端发送接收看看她的稳定性。

HL AsySocket 服务开发框架 - 一般性测试1的更多相关文章

  1. HL AsySocket 服务开发框架 - 总体思路与架构

    一 背景 最近在园子了浏览了几篇有关Socket文章,得到了一些启发萌生了想要重构公司在2000年用.NET Framework 2.0 与 Visual Studio 2005开发的AsySocke ...

  2. HL AsySocket 服务开发框架 - 业务逻辑层

    一 概述 Socket服务只是提供一个网络传输服务. 业务逻辑层在整体架构中的位置在那里呢,如图: 网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处 ...

  3. 分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo+SkyWalking的微服务开发框架

    集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架 Github源代码地址 htt ...

  4. Apache Thrift 跨语言服务开发框架

    Apache Thrift 是一种支持多种编程语言的远程服务调用框架,由 Facebook 于 2007 年开发,并于 2008 年进入 Apache 开源项目管理.Apache Thrift 通过 ...

  5. Active Directory 域服务安装与测试

    Active Directory 域服务安装与测试 实验原理: 安装域服务并创建用户,把另一个电脑加入域中,然后用域账户登录以及用本地账户登录测试 实验条件:windows server 2008(域 ...

  6. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  7. Munge服务部署和测试

    1. 概述2. 下载3. 安装3.1 源码简要说明3.2 编译安装3.3 配置3.4 创建munge.key3.5 启动方式 1. 概述 munge是认证服务,用于生成和验证证书.应用于大规模的HPC ...

  8. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  9. thrift框架总结,可伸缩的跨语言服务开发框架

    thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...

随机推荐

  1. UVA 11992 Fast Matrix Operations(线段树:区间修改)

    题目链接 2015-10-30 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=s ...

  2. 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  3. 数据库知识整理<三>

    保证数据的完整性: 3.1数据完整性概述: 数据完整性的意义:我们知道数据库能防止储存垃圾数据,RDBMS实现该功能主要是通过维护数据完整性来实现的.根据数据完整性实施方法我们将其分为四类:实体完整性 ...

  4. EmberJs之使用Ember-Data

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  5. Asp.Net Web API 2第七课——Web API异常处理

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来讲解Asp.Ne ...

  6. 撰写合格的REST API

    原文 : http://mp.weixin.qq.com/s?__biz=MzA3NDM0ODQwMw==&mid=208060670&idx=1&sn=ce67b889698 ...

  7. Unity2.0容器自动注册机制

    现如今可能每个人都会在项目中使用着某种 IoC 容器,并且我们的意识中已经形成一些固定的使用模式,有时会很难想象如果没有 IoC 容器工作该怎么进展. IoC 容器通过某种特定设计的配置,用于在运行时 ...

  8. 微软BI 之SSIS 系列 - 再谈Lookup 缓存

    开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...

  9. [自制简单操作系统] 2、鼠标及键盘中断处理事件[PIC\GDT\IDT\FIFO]

    1.大致介绍: >_<" 大致执行顺序是:ipl10.nas->asmhead.nas->bootpack.c PS: 这里bootpack.c要调用graphic. ...

  10. 51单片机-PC数据传输 温度 距离 监控系统设计

    >_<:功能概述: 通过串口PC和单片机通信,可以询问单片机测得的温度,可以询问声呐测距的测量距离,同时把测量温度显示在数码管上. >_<:PC部分 这里com.cpp和com ...