如果发现你的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. 决AndroidStudio 安卓模拟器安装在D盘问题

    决AndroidStudio 安卓模拟器安装在D盘问题 转 http://www.cnblogs.com/LiuDanK/articles/10106473.html 大家知道安卓的模拟器位置默认是放 ...

  2. AAC编码学习

    AAC音频编码 https://www.jianshu.com/p/af0165f923e9 https://blog.csdn.net/u013427969/article/details/5309 ...

  3. vue笔记-条件渲染

    条件渲染 1:指令v-if单独使用和结合v-else //单独使用 <h1 v-if="ok">Yes</h1> //组合使用 <h1 v-if=&q ...

  4. RSP小组——团队冲刺博客六

    RSP小组--团队冲刺博客六 冲刺日期:2018年12月18日 前言 各成员今日(12.18)完成的任务 李闻洲,赵乾宸代码合并 马瑞蕃图形后续支持,编写博客,燃尽图 蒋子行会议记录 各个成员的任务安 ...

  5. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习4

    #include <iostream> using namespace std; const int strsize=30; const int BOPSIZE=5; void showm ...

  6. hadoop2-elasticsearch的安装

    本文主要讲elasticsearch-2.2.1的安装过程. 准备工作: 1.搭建虚拟机 你需要先参考 hadoop2集群环境搭建 把你的虚拟机搭建起来-hadoop环境可以先不用搭建(完成步骤1到步 ...

  7. 快排实现仿order by多字段排序

    class OrderBy(object): def __init__(self, sequence, *condition, **extra_condition): ""&quo ...

  8. Django 简单的使用

    1.创建一个名字为 two 的项目 并 进入项目 2.创建一个 app 3.更改语言和时间 4,注册APP 5.模板创建和设置 设置模板查找的路径 6,然后我们开始设置 路由映射 主项目映射 然后我们 ...

  9. AI-2.梯度下降算法

    上节定义了神经网络中几个重要的常见的函数,最后提到的损失函数的目的就是求得一组合适的w.b 先看下损失函数的曲线图,如下 即目的就是求得最低点对应的一组w.b,而本节要讲的梯度下降算法就是会一步一步地 ...

  10. python-list操作

    字符串取值不好取 数组,存在编号,易于取值,(list array) 1.list 定义:name=[]   由中括号定义数组,例如name=['jyj','ws','jyt','js'] 2.lis ...