增加IIS服务器的RAM使用量

我在以下服务器configuration上运行大型ERP系统 。 该应用程序是使用AngularJS和ASP.NET 4.5开发的

Dell PowerEdge R730(四核2.7 Ghz,32 GB RAM,5 x 500 GB硬盘,RAID5configuration)软件:主机操作系统是VMWare ESXi 6.0两个VM在VMWare ESXi上运行..一个是Windows Server 2012 R2,分配有16 GB内存这包含与我的应用程序代码的IIS 8服务器 另一个虚拟机也是Windows Server 2012与SQL Server 2012和16 GB的内存分配….这只是包含我的应用程序数据库。

你看,我分开了应用程序服务器和数据库服务器的负载平衡的目的。

我的应用程序包含一个注册模块,预计负载非常高(10分钟内约有10,000名访问者)

为了支持这样的请求量,我在我的IIS服务器中完成了以下工作 – >将应用程序池长度中的请求队列增加到5000 – >为aspx文件启用输出caching – >在IIS服务器中启用静态和dynamic压缩 – >设置虚拟内存限制每个应用程序池的私有内存限制为0 – >将每个应用程序池的最大工作进程数增加到6个

然后我使用gatling在我的应用程序上运行负载testing。 我立即将500个用户注册到我的注册模块中。

但是,我看到只有40%/ 45%的RAM正在使用。 每个工作进程只使用最多130 MB左右的内存。

而且gatling报告说我的请求中有大约20%出现了403错误,超过60%的HTTP请求的响应时间大于20秒

单个用户在大约3分钟的时间内发出380个HTTP请求。 单个用户的总数据传输量为1.5 MB。 我模拟了500个这样的用户。

我的服务器调整有什么缺失吗? 我已经调整了我的应用程序代码,以最大限度地减less内存泄漏,增加超时等等。

将您的SQL Server放置在专用主机上。 在访问物理资源之前,您有两代客户操作系统在这里运行。 你有hypervisor作为基本操作系统,Child Guest是Windows Server主机,Grandchild OS是SQL Server,它抓取磁盘和RAM块,并用它自己的命名空间来pipe理它。 如果您拥有专用磁盘和专用networking,则可以减轻一些此类问题。 不要让虚拟机可以重新定位。

http://www.tpc.org/tpctc/tpctc2009/tpctc2009-13.pdf

您将在共享资源上进行一些仲裁,因为您在两台主机之间分配了32GB的内存,这为系统pipe理程序留下了精确的零,因此系统pipe理程序将开始仲裁访问以共享段,同时为自己留下一个块。 如果您将两个组件安装在同一个OS实例中,并且使用本地命名pipe道进行SQL Server的所有通信,则实际上可以获得更好的性能。 就目前而言,你正在为虚拟机pipe理程序物理主机,两个操作系统实例和孙子操作系统的超额预订培养大量的开销。

“单个用户发出380个HTTP请求…”

据推测,这些不是所有的dynamic元素,这里以图像,样式表,JavaScript,字体等forms存在大量的静态绒毛。 在这些静态元素之前获取一个CDN,所以负载在静态元件的原点上几乎为零。 你要把资源和负载专门去一个dynamic块,表单提交数据而不是一般的文件处理。 嘿,我会远去build议您希望客户端的caching时间至less与您的构build部署持续时间一样长。 每周部署星期六和午夜,然后使caching时间在星期六的午夜过期,每个构build一周。 这将保持你的CDN播种良好,你可以避免命中,networking负载和服务器负载。