1

我有这个在线商店,使用以下语言/技术 C#、MVC3、DI 的结构图、实时通知的 SignalR 和会员登录的 FBConnect。

我在具有 Core2 Quad CPU @ 2.40GHz 和 8GB RAM 的专用服务器上运行该站点,但是当许多用户访问该站点时,CPU 使用率仍然达到 60-80%。该站点正在从数据库中加载照片,但我认为这不是问题,因为我已经实现了这些照片的缓存,您可以在我的旧帖子@ MVC3 + 中看到来自数据库的流式图像导致 CPU 使用率非常高在我的服务器上。我什至将我的页面修改为最初加载 20 张照片,并且仅在用户滚动到页面底部时才加载更多照片。

我已经和一位也是 .net 开发人员的朋友讨论过这个问题,他说我可能应该研究 Session-State 模式,因为它可能会有所帮助。我没有对我网站上的 Session-State 进行任何更改,因此它仍在使用默认的 InProc。

我的问题是:可以处理大流量的最佳会话状态模式是什么?它会提高我网站的性能吗?

只是为了让您了解该网站如何获得大量用户,以下是它的工作原理: 1. 卖家在相册中发布待售物品的照片(最大照片/相册为 200,并且它们在 20 之前加载)。2.第一个评论/预订该项目的客户将是获胜的买家。3.卖方然后向第一位买方确认评论/保留。

该网站有超过 1000 名用户,其中至少 80% 的用户同时访问该网站。

我可以使用默认的 InProc 吗?还是应该使用 StateServer 或 SQLServer 模式?

谢谢

4

3 回答 3

2

我认为这不是问题,因为[...]

你在猜测。只要您猜测您将无法处理性能问题(假设这是一个问题:见下文)。

你需要测量。使用类似mini-profiler的东西来确定到底是什么花费了时间。

但:

CPU使用率仍然达到60-80%

网站变慢了吗?请求是否在排队?用户是否认为网站速度很慢?

对于您获得的请求率,该级别的 CPU 使用率可能是相当正常的。

于 2012-06-19T15:05:44.527 回答
1

如果您使用单独的服务器来存储会话,这将减轻主服务器上的会话管理负载,但在读取/写入另一台服务器上的会话时会增加网络开销。

我认为使用 SQLServer 模式是您情况下的最佳选择,特别是因为它使您受益于拥有会话的“硬”副本,以防对谁首先评论/保留该项目存在任何争议。

您已经在使用 SQL 来加载图像,那么为什么不再给它做一件事呢?

如果我忽略了什么,我会让社区指出。

于 2012-06-19T15:05:28.057 回答
1

在我看来,800 个用户访问同一台服务器并不是那么简单。

Sessionstate 与它无关。

您正在从数据库加载图像并将它们保存在缓存中。缓存中有多少张图片?每张图片100KB?50K 图像或更多?

如果缓存中的内容过多(不仅仅是图像!),ASP.NET 将自动丢弃缓存中的内容(取决于它们的重要性)。当您到达这一点时,您的应用程序将不断地将新内容放入缓存中,这些新内容在插入后几乎立即被删除,这与没有缓存中的图像相同。

无论如何,我仍然认为情况可能并非如此,因为如果你真的有 800 个用户同时访问同一台服务器,那就很多了。

我同意@Richard。使用类似迷你分析器的东西。

于 2012-06-19T15:16:02.500 回答