如果发现你的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. python控制语句---循环结构语句

    这次主要把循环结构的控制语句补上,主要包含while.for.continue.break.循环嵌套.主要写一些基本的认识以及包含的一些实例.当只有唯一路径且只跑一次的时候选择上一节中的选择结构语句就 ...

  2. c++ 积累

    class MyClass { public: MyClass()=default; MyClass(const MyClass& )=delete; ...... 有些时候我们希望限制默认函 ...

  3. 2018-2019-2 网络对抗技术 20162329 Exp4 恶意代码分析

    目录 Exp4 恶意代码分析 一.基础问题 问题1: 问题2: 二.系统监控 1. 系统命令监控 2. 使用Windows系统工具集sysmon监控系统状态 三.恶意软件分析 1. virustota ...

  4. 2019年3月2日-小雨.md

    2019年3月2日, 星期六 开学已经一周了,时间好像限制了自己进步的脚步,一个人的精力有限,想做好方方面面实在是太难了,有很多事儿最后都没做的完美.相反,自己应该放下繁琐的包袱,简简单单的干一件事儿 ...

  5. 如何让pandas表格直接转换为markdown表格

    https://stackoverflow.com/questions/33181846/programmatically-convert-pandas-dataframe-to-markdown-t ...

  6. 数据分析——matplotlib

    基础 # coding=utf-8 import matplotlib.pyplot as pt import numpy as np from matplotlib import font_mana ...

  7. Markdown常用快捷键

    Markdown使用的符号:井号,星号,大于号,中括号,竖线,横杠,波浪线,反引号 # ,*, > ,[],|,-,~,` 井号 + 空格:根据空格的个数显示各标题的大小 标题一 标题二 标题三 ...

  8. CentOS7上Docker简单安装及nginx部署

    安装 如果原来安装过docker,先把原来的删掉,再安装(如果是首次安装docker忽略第一步,直接在第二步看起) 1.1先查看下已经安装了那些docker yum list installed | ...

  9. 【腾讯海纳】系统未发布时如何获取获取property_id在本地进行测试?

    有现成https协议域名使用者,可忽略此文. 直接先上图,明白的人看一眼图片就知道怎么拿了,如下所示: 解释说明: 在完成添加套件,以及测试应用的前提下,按如下操作流程: 1.访问路径:登录“海纳开发 ...

  10. 蓝鲸单机安装mysql问题记录

    1.注意默认启动用户为mysql 2.由于执行指令用的root,有些文件会生成为root用户 3.注意将datadir basedir  socket dir  修改称mysql  chown mys ...