Mar*_*own 10 windows memory capacity-planning windows-server-2008-r2
我有一个在 Windows 2008 R2 上运行的自定义服务器应用程序。它是用 .Net 编写的本地 Windows 服务,支持许多自定义终端。我有一台测试机器,它的规格与实时服务器相似,我有一组客户端模拟器,我可以用它来产生一个与真实系统合理近似的负载。我需要能够支持其中的 12,000 个,目前服务器内存不足(分页正在通过屋顶)。
我的计划是只启动 100 个模拟器,测量内存使用情况,然后再启动 100 个测量内存并重复直到分页开始上升(实际上我将采用三个以上的数据点。)这应该给我一个数字100 个模拟器所需的额外内存量,并使我能够预测需要多少内存。我只需要一个 +/-30Gb 的粗略想法就可以避免购买服务器所需的全部 2Tb(价值 150,000 美元)。我的问题是这是否是一种合理的使用方法,如果是,您将监控哪些性能计数器以提供实际使用的内存量?
我在这里专门讨论内存,因为工作集、私有字节、已提交、共享、虚拟和所有其他内存术语之间的区别让我感到困惑。我想我可以自己监控 CPU、IO 和网络。我注意到的另一件事是 .Net Cache 根据可用内容调整其内存使用量,这使得很难发现趋势。
诚实地?我不。
在指定将看到任何类型的实际工作负载的服务器时,我尽可能多地塞满 RAM(系统更可能受到 RAM 限制而不是 CPU 或磁盘限制 - 唯一其他有保证的瓶颈是前端公共汽车)。
如果您想弄清楚您的应用程序可能使用多少 RAM,就像您建议的那样进行基本负载测试是一个良好的开端,但是如果您已经在生产中使用了这个系统(听起来像您这样做)并且您的生产系统正在交换您的任务更简单:弄清楚您使用了多少交换空间-->添加至少 2倍的RAM(四舍五入以适应系统的 DIMM 大小限制)。
如果您执行负载测试以获取粗略数字并从中推断,请记住考虑以下几点:
内存曲线可能是两个不同的部分
(最初随着框架/共享库被缓存而急剧上升,然后随着每个新应用程序的不可共享代码被放入内存时曲线稍微不那么陡峭)
您仍然需要用于磁盘和共享库缓存以及操作系统的可用 RAM。
(这应该至少比您的应用程序需要一些演出)
所有软件都会泄漏内存(至少所有实用软件都会泄漏),因此请在测试中注意这一点,并确保您有足够的空间来处理泄漏。
您的负载可能会在服务器的整个生命周期内增加。 相应地计划。
(如果您没有良好的容量规划数字,请将今天的工作量加倍并计划处理它)。
今天购买过多的 RAM 比让您的环境明天崩溃要便宜。
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |