1

我有这个奇怪的问题。我在服务器上有 3 个 WCF 服务。管理服务是外部请求的主要入口点。另一个服务是应用程序的逻辑。第三个服务是一个数据库连接服务,这两个服务都在做大部分工作(数据库做)。

当我对管理器的请求运行负载测试并运行性能测试时,我有 90 个不同的线程同时运行,第二个服务大约有 50 个,而数据库连接只有大约 12 个。

我觉得这是应用程序中的主要性能问题。当我对这两个服务进行分析时,我发现它们确实在等待来自数据库服务的响应。

我尝试直接对数据库服务进行测试。在打开通道之后和发送请求之前,我运行了 80 个线程并使用 ManualEventHandler 停止了它们。然后当一切准备就绪时,我设置了处理程序,它在 DB 连接服务中运行了大约 25 个线程。

因此它能够处理超过 12 个线程。

有什么想法吗?

为什么请求会排队?

一些附加信息:

绑定是基本的httpbinding,但我尝试了net pipe ipc,结果相同。我已经将上下文模式和并发设置为每个调用或每个会话多个具有相同的结果。

此外,这些服务是自托管的。这种架构的原因是为了允许多个其他服务或应用程序直接向这些服务发送请求。在这个特定的事件中,我按照描述对其进行测试,在其他事件中,流程可能会有所不同。

4

1 回答 1

2

这意味着这些请求正在排队。如果您的所有服务都托管在 IIS 上,您可以使用 ASP.NET 性能计数器来查看每个服务级别上的挂起请求的数量(据我所知,WCF 不提供此类性能计数器)。正如@the coon 所暗示的,这肯定是错误的架构方法。与在不同层上由同一服务执行的业务逻辑和数据访问操作相比,每个服务调用都可以被认为是昂贵的。老实说,我看不出使用这种方法的理由。

于 2012-06-28T14:17:39.200 回答