2017-06-05 92 views
1

我遇到了一个asp.net核心应用程序的问题,该应用程序在负载下启动时虚拟挂起。一旦启动,应用程序可以处理加载没有问题。感觉像每个并发请求都发生初始化。有没有人遇到类似的行为?Asp.Net在加载时启动时出现核心性能问题

测试场景:

  • 开始测试应用程序,不但有50多个任务
  • 该服务的启动之前启动该服务
  • 通知请求起步,但极长的延迟完成并且大多数会超时

作为临时解决方案,我创建了中间件,在第一次完成前一直等待请求。这有效地让asp.net mvc在处理大部分请求之前进行初始化。这个特殊的应用程序是与EF核心的asp.net核心1.1(网络API)。

+0

嗨,我遇到了同样的问题,你能详细说明你创建的中间件吗?我看不到一个实施它的好方法......如果你找到了理由,我会很高兴听到它!谢谢 – Gouffe

+0

@Gouffe我在一个关于asp.net核心吞吐量的问题上发布了我的黑客攻击:https://github.com/aspnet/KestrelHttpServer/issues/1807#issuecomment-306329090 该问题没有真正解决就关闭了。我一直无法追踪到红隼,核心或其他东西。它“感觉”像我们正在使用一些依赖关系,而不考虑并发请求的昂贵初始化。 – Kevin

+0

感谢您的链接,不幸的是,它不能解决我的问题。我有一个初始化问题,但是,在随机时间,asp.net核心进程没有任何说明(尚未)进入100%cpu。无论如何,谢谢你,非常有趣的解决方法! – Gouffe

回答

1

当使用位于中国全国各地的真实数据库时,我对ASP.NET WebAPI的第一次请求经历了900ms的延迟。这是因为它需要建立一个用于连接到所述数据库的连接池,并且在运行服务时我不急于创建连接池。相反,当我通过在服务容器中注册为单例的连接工厂请求连接时,它会被懒惰地初始化。

也许您遇到了与您所使用的Entity Framework Core相同类型的延迟,这可能是由SQL Server支持的。 作为此初始请求的一部分,数据库的连接池是否被懒惰地启动?

试着制作一个没有任何依赖关系的控制器,它返回一个香草200 OK。假设您没有全球性的过滤器,其中有昂贵的服务来保湿,您应该可以看到Web服务的基线初始化性能。