【发布时间】:2016-04-13 05:32:15
【问题描述】:
我在以下服务器配置上运行大型 ERP 系统。该应用程序是使用 AngularJS 和 ASP.NET 4.5 开发的
Dell PowerEdge R730(四核 2.7 Ghz,32 GB RAM,5 x 500 GB 硬盘,已配置 RAID5) 软件:主机操作系统是 VMWare ESXi 6.0 两个 VM 在 VMWare ESXi 上运行 .. 一个是 Windows Server 2012 R2,有 16 个已分配 GB 内存...这包含带有我的应用程序代码的 IIS 8 服务器另一个 VM 也是带有 SQL Server 2012 和 16 GB 内存的 Windows Server 2012 R2...。这仅包含我的应用程序数据库。
你看,我把应用服务器和数据库服务器分开是为了负载平衡。
我的应用程序包含一个注册模块,其中的负载预计会非常高(10 分钟内大约有 10,000 名访问者)
为了支持这么多的请求,我在我的 IIS 服务器中执行了以下操作 -> 将应用程序池中的请求队列长度增加到 5000 -> 启用 aspx 文件的输出缓存 -> 在 IIS 服务器中启用静态和动态压缩 ->将每个应用程序池的虚拟内存限制和私有内存限制设置为 0 -> 将每个应用程序池的最大工作进程增加到 6
然后我使用 gatling 对我的应用程序运行负载测试。我一次将 500 个用户注入到我的注册模块中。
但是,我发现只有 40% / 45% 的 RAM 被使用。每个工作进程最多只使用 130 MB 左右。
gatling 报告说,我大约 20% 的请求出现 403 错误,超过 60% 的 HTTP 请求的响应时间超过 20 秒。
单个用户在大约 3 分钟内发出 380 个 HTTP 请求。单个用户的总数据传输量为 1.5 MB。我已经模拟了500个这样的用户。
我的服务器调优有什么遗漏吗?我已经调整了我的应用程序代码,以尽量减少内存泄漏、增加超时等等。
【问题讨论】:
-
根据此页面,确切的 403 错误是什么:en.wikipedia.org/wiki/HTTP_403。 403.502 的解决方案与 403.18 完全不同。很可能缺少 RAM 不是问题。您可能需要 CPU 来处理所有这些并行请求
-
如果请求需要时间并且不是异步编写的,那么您可能需要更多的工作人员。如果你对 20 个工人做同样的事情会发生什么? 100?
-
20 / 30 名工人的结果是一样的......如果有 50 名工人,应用程序的速度会更慢
标签: asp.net angularjs iis load-testing esxi