我们有以下设置:
虚拟服务器,Intel Xeon X5650 @ 2.67Ghz(4个处理器)8GB RAM Windows服务器2008标准64位Sql Server Express IIS 7.5
我们的数据库只有200MB。 我们正在运行一个ASP.net应用程序。 我们最近遇到了一些性能问题,约200个并发连接导致CPU使用率达到100%(主要被IIS占用),并将响应时间缩短到20秒左右! 经过对代码的一些调整之后,我们已经能够在1分钟内用1500个并发用户运行loader.io的负载testing, 最终我们的响应时间大约是5秒,CPU大约是95%,主要由IIS消耗,我们的记忆在4GB左右。 但是,我们预计在1500以上的高峰期,在短时间内高达4000左右的用户。
我的问题如下:1)目前的设置是否正常? 我们的网站是相当密集的数据库,我们正在使用entity framework。 2)升级到Sql Web版本会有什么好处,看起来好像我们的数据库是如此之小? 3)你认为这种设置可以处理4000个用户吗? 4)关于我们能做些什么来处理这个负载的build议?
我知道这是有点主观,但任何答案非常感谢。
这是我们目前的设置正常的性能?
取决于你的代码。 你有没有简介代码,以确保你没有什么愚蠢的地方呢?
我们的网站是相当密集的数据库,我们正在使用实体框架。
再一次,你是否想知道你花了很多时间在实体框架? 这是慢的,问题是“密集”的意思。 这是分析器的用途。
如果我们的数据库太小,升级到Sql Web版本会有什么好处吗?
帮忙,我的比萨来得太晚了。 Wiould升级到更大的汽车的帮助? 你说你自己,你花了在IIS的时间,而不是SQL服务器。
你认为这种设置可以处理4000个用户吗?
你觉得我的车够大吗? 注意我不会告诉你我需要什么。 没有看使用模式和你的代码 – 不知道。 说:相比你今天买的服务器是可悲的。 因此,这是一个无关紧要的问题 – 只需要升级即可。
有什么建议我们可以做什么来处理这个负载?
加载测试+分析器,优化代码。 获取更大的服务器 意识到我们没有水晶球来弄清你的代码有多好/坏/愚蠢。
这里出现的第一个问题是:您是否部署了RELEASE或DEBUG编译的项目二进制文件?
升级到WebEdition将不会解决任何问题,因为版本的差异非常简单:WebEdition只是在内部调度程序/ etc中受到限制。 – 所以你会在标准版上很好。
我的经验是并发请求的最关键的方面是服务器内存的数量和你的代码对这个内存的消耗。
随着物理内存的消耗,服务器开始从物理内存交换到虚拟内存,这会显着降低处理速度,并导致您描述的症状。
我会开始把另一个8GB的内存放入服务器。 同时尝试优化代码,以便在请求期间处理更少的数据或使用更少的内存。 另外,将sql server移动到一台独立的机器上,这样在内存可用性方面,iis和sql server之间就不存在竞争。
用你目前的机器,我怀疑问题是IIS本身,而是与你的应用程序设计和/或利用框架的方式有关。 我个人最近才了解到IIS请求,包括多次访问数据库,可以测量几百微秒,而不是几百毫秒……单个锁定错误或不平衡排队会限制应用程序的可扩展性,而不管你的硬件规格[ https://twitter.com/michaelzino/status/454512110165184512%5D 。 已知实体框架针对第一次初始调用针对数据库模式验证您的模型。 我会建议分析你的应用层,从数据访问层开始,或者内在的数据库调用,然后上升。