如果发现你的dotnet core服务并发上不去,但cpu资源还比较充足那就要注意了!因为这很有可能是你没有设置一个运行项导致...,下面要提到的就是GC.Server这玩意,实际上项目编译中并没有这一项设置,通过app.config设置也无效。那到底这是一个什么东西接下来说一下实际的应用效果和配置方式。

原因

最近一直做在做FastHttpApi方面的性能测试,在本机测试性能一直都比较良好;问题部署上服务器后效率竟然跑不过asp.net core webapi,这结果和在本地测完全是两码事;主要原因是12核的CPU无法跑到超过8核的资源,而asp.net core基本能跑满!为了找到原因还把'Kestrel.Transport.Sockets'代码看了一遍,怎看也不看不出有本质上的性能优势,不过实测结果告诉我的确是这样了;于是又仔细翻阅了代码和配置文件也没看到有什么特别的配置和线程配置信息,后来实在没办法了又看了一遍发布后的配置信息,结果看了一个System.GC.Server的配置信息。

关于Server GC的解释

网上对System.GC.Server有实质性介绍的文档并不太多,MSDN翻译如下: 公共语言运行时 (CLR) 支持两种类型的垃圾回收:工作站垃圾回收(适用于所有系统)和服务器垃圾回收(适用于多处理器系统)。 使用 <gcServer> 元素以控制 CLR 执行的垃圾回收类型。 使用 GCSettings.IsServerGC 属性以确定是否启用服务器垃圾回收。 对于单处理器计算机,默认的工作站垃圾回收应该是最快捷的选项。 对于双处理器计算机,最快捷的选项既可以是工作站垃圾回收又可以是服务器垃圾回收。 对于两个以上处理器的计算机,服务器垃圾回收应该是最快捷的选项。

从MSDN上并没有太多讲述Server GC把发挥的作用,最明确一点就是可以使用多处理器对GC进行快捷处理,至于这种配置在服务程序中具体能发挥多少作用呢没有一个具体的指标性东西。然而以于asp.net mvc这些项目默认都会编译成ServerGC模式并不需要配置,而我们自己写的Console程序则不是,需要根据情况自行配置。

修改后的运行效果

于是把这配置信息复制到测试程序上,结果一跑整体的效果才出来,这个时候服务基本可以跑满所有核资源;RPS从原来的最大14万提高到24万,在压测1000万请求的过程保持稳定。由于对GC了解不是很深入,初步猜想由于默认是单线程处理GC,这样会导致所有线程都会卡在GC处理上;即使你加大线程池数量或加大并发也不会从根据上解决问题,只会让并发处理延时加大! 当在多核开启GC Server的情况上GC就不会卡在一个线程上由多核的线程来完成,由于GC处理不会卡在一个线程,所以资源能够完全发挥出来提高并发处理能力。

程序配置Server GC

项目属性配置里是没有Server GC这项设置,网上有资料说在app.config中进行配置,但这个配置对dotnet core程序是无效的。后来在MSDN找到资料需要手动编辑csproj 文件在PropertyGroup中添加相关内容.

<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

服务测试碰钉子Server GC的更多相关文章

  1. JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server

    [请尊重原创版权,如需引用,请注明来源及地址] 在此之前一直用的Eclipse挺顺手的,今天突然想换MyEclipse试试,不知安装MyEclipse的时候我选错了什么选项,反正JDK和Tomcat的 ...

  2. vs自带服务测试工具

    在vs安装目录有一个vs自带的服务测试工具,地址为: "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Wcf ...

  3. 12个强大的Web服务测试工具

    在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种 ...

  4. 使用UDL文件来测试SQL Server数据库连接

    原文 来自http://www.2cto.com/database/201308/234427.html 使用UDL测试SQL Server连接问题   做数据库经常会遇到SQL Server连接的问 ...

  5. 用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据的解决办法

    用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据(实际显示的是Response Times Over Time),解决办法:在GUI模式 ...

  6. swagger结合dubbo的rest服务测试

    swagger结合dubbo的rest服务测试 背景介绍 我们应用的dubbo服务导出,可能没有直接的触发点去发起调用测试,除非自己手写controller和test类,缺乏一个动态工具,类似流行的s ...

  7. Datasnap 服务端 (Server)Session 管理 --- 解决 全示例慢(Google)

    Datasnap 服务端 (Server)Session  管理:  http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Server_Side_Ses ...

  8. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  9. JMeter配置JDBC测试SQL Server/MySQL

    一.配置SQL Server 1.下载sql驱动,将sqljdbc4.jar放到JMeter安装目录/lib下. 2.启动JMeter,右键添加->配置文件->JDBC Connectio ...

随机推荐

  1. ubuntu“少折腾”

    1.python版本默认python3 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 sudo ...

  2. 简单使用WebSocket实现聊天室

    环境需求:flask,websocket第三方包 目录结构 web中实现群聊 ws_群聊.py文件 # 实现一个websocket 先下载包 gevent-websocket from flask i ...

  3. 微信获取ticket及生成二维码(临时或永久)

    微信获取ticket及生成二维码(临时或永久) curl.php---- define("APPID",""); define("APPSECRET& ...

  4. hadoop2-MapReduce详解

    本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...

  5. SQLServer表、列备注管理

    在开发时,为了方便,在SQL SERVER库内对表名.列名进行备注,但在DB部署客户时,想一次清理上述备注值. 特编写如下 SQL,一次清除上述备注内容: declare @table nvarcha ...

  6. jquery获取一组文本框的值

    $("#btn5").click(function()  {    var str="";$("[name='checkbox'][checked]& ...

  7. 编译部署 Mysql 5.7

    1.环境准备 RHEL7.4(最小化安装)  64bit   2G 内存 (1G 内存编译将近一个小时) 磁盘空间 15G 以上. 配置为本地yum 源 从MySQL5.7版本开始,安装MySQL需要 ...

  8. cf 744D

    一开始没看懂题解,想了好久(一整天)才想明白是枚举弦上点二分半径check角度,看了下clj的代码发现思路都一样就开始写了. 借鉴了一下clj的代码. 调了一个多小时. 几个注意点:看到好多 rand ...

  9. 小米 OJ 编程比赛 01 月常规赛_灯_找规律

     灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应 ...

  10. Web版记账本开发记录(三)开发过程遇到的问题小结2

    问题1,获得当前时间 Date d = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ...