首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何估算要购买多少内存?

你如何估算要购买多少内存?
EN

Server Fault用户
提问于 2012-02-13 10:55:35
回答 2查看 988关注 0票数 10

我有一个运行在Windows2008 R2上的自定义服务器应用程序。它是一个国产Windows,用.Net编写,支持许多自定义终端。我有一台测试机器,它具有与实时服务器类似的规范,并且我有一组客户机模拟器,我可以使用这些模拟器来产生一个负载,这是真实系统的合理近似。我需要能够支持其中的12,000,目前服务器正在耗尽内存(分页正在通过屋顶)。

我的计划是只启动100个模拟器,测量内存使用情况,然后再启动100多个度量内存,然后重复直到分页开始上升(实际上,我将占用三个以上的数据点)。这将为我提供100个模拟器所需的额外内存数量,并使我能够预测需要多少内存。我只需要一个粗略的想法+/-30 to,以避免购买完整的2Tb (价值15万美元),服务器将采取。我的问题是,这是否一种合理的使用方法,如果是的话,你会监视哪些性能计数器来给出实际使用的内存量?

我在这里特别提到内存,因为工作集、二等字节、提交、共享、虚拟和所有其他内存术语之间的区别使我感到困惑。我想我可以自己来监控CPU,IO和网络。我注意到的另一件事是,.Net缓存根据可用的内容调整其内存使用,这使得很难发现一种趋势。

EN

回答 2

Server Fault用户

发布于 2012-02-14 18:13:15

老实说?我没有。

当指定一台服务器将看到任何类型的实际工作负载时,我会尽可能地塞进尽可能多的RAM (系统更有可能导致RAM受限,而不是CPU或磁盘受限-唯一有保障的瓶颈是前端总线)。

如果您想知道您的应用程序可以使用多少RAM,就像您建议的那样,这是一个很好的开始,但是如果您已经在生产中使用了这个系统(听起来像您这样做),并且您的生产系统正在交换您的任务,那么您的任务就更容易了:找出您正在使用的交换空间-->添加至少2倍的RAM (为了适应您的系统的DIMM大小约束)。

如果您执行负载测试以获得粗略的数字并从中推断,请记住要考虑以下几点:

  1. 内存曲线可能是两个不同的部分 (当框架/共享库被缓存时,初始的急剧上升,然后当每个新应用的不可共享代码被放入内存中时,曲线就会稍微不那么陡峭)。
  2. 您仍然需要用于磁盘和共享库缓存以及操作系统的免费RAM。 (这至少应该是你的应用程序需要的几个小部分)
  3. 所有软件都会泄漏内存(至少所有实用的软件都会这样),所以在测试中要注意这一点,并确保您有足够的空间来处理泄漏。
  4. 您的负载可能会在服务器的生存期内增加。相应地计划。 (如果您没有很好的容量规划数量,那么现在的工作量将增加一倍,并计划处理这一问题)。
  5. 今天买太多的RAM比你的环境明天掉下来更便宜。
    • 第一个推论:如果你买了一台比你需要的稍大一点的服务器,你就是保持公司运转的有先见之明的管理员。你将在很大程度上被忽视和不被赏识。
    • 第二个推论:如果你的机器太小,有问题,你是一个无能的小丑,无法预测500%的增长,而且每个人都讨厌你。
票数 8
EN

Server Fault用户

发布于 2012-02-15 11:35:22

谢谢,更新至少给大家一条线索。你正在考虑2Tb的记忆,这意味着你在一个与通常的设置不同的地方玩。大系统。我不愿想到要释放出多少热量。

考虑到这是一个内部服务器进程,并且内存正在耗尽(您没有说明从哪个级别开始分页),但是我希望消除服务器进程正在消耗更多内存的可能性,然后再进行下一步。如果这种情况发生了,你所做的就没有什么不同了,系统会在某一时刻停止。

我不知道有什么通用的工具,你可以用来给你更多的基本概述发生了什么……窗户带来了什么。服务流程本身是一个黑匣子,开发团队需要提供监视工具。

快速返回信封计算:

代码语言:javascript
复制
2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session

这不会超出正常.net exe工作集的范围。

服务有多个线程吗?如果他们要为每个连接启动一个线程,那么应该看看他们是如何做到这一点的。微软的ProcExp.exe是一种简单的方法,可以查看您是否有多个线程,以及这些线程正在消耗什么。它不知道.net,但会给您win32计数器。

您能指出在开始分页之前进行测试时有多少内存和多少连接吗?

那么,如何确定服务器进程是否存在内存泄漏问题?它可以通过连接每个会话来积累更多的内存,也可能是在积累内存,而不是永远释放它们。

您可以做的是-选择一些不会引发分页的会话,并模拟这个数目的连接。-运行几个小时的模拟,并使用perfmon监视基本内存计数器。-对短时间连接和断开连接的会话重复这些测试。

这样做的目的是查看服务是否在每个会话中消耗越来越多的内存,或者打开的会话是否会引起内存使用量的不断增加。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/359518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档