我有一个运行在Windows2008 R2上的自定义服务器应用程序。它是一个国产Windows,用.Net编写,支持许多自定义终端。我有一台测试机器,它具有与实时服务器类似的规范,并且我有一组客户机模拟器,我可以使用这些模拟器来产生一个负载,这是真实系统的合理近似。我需要能够支持其中的12,000,目前服务器正在耗尽内存(分页正在通过屋顶)。
我的计划是只启动100个模拟器,测量内存使用情况,然后再启动100多个度量内存,然后重复直到分页开始上升(实际上,我将占用三个以上的数据点)。这将为我提供100个模拟器所需的额外内存数量,并使我能够预测需要多少内存。我只需要一个粗略的想法+/-30 to,以避免购买完整的2Tb (价值15万美元),服务器将采取。我的问题是,这是否一种合理的使用方法,如果是的话,你会监视哪些性能计数器来给出实际使用的内存量?
我在这里特别提到内存,因为工作集、二等字节、提交、共享、虚拟和所有其他内存术语之间的区别使我感到困惑。我想我可以自己来监控CPU,IO和网络。我注意到的另一件事是,.Net缓存根据可用的内容调整其内存使用,这使得很难发现一种趋势。
发布于 2012-02-14 18:13:15
老实说?我没有。
当指定一台服务器将看到任何类型的实际工作负载时,我会尽可能地塞进尽可能多的RAM (系统更有可能导致RAM受限,而不是CPU或磁盘受限-唯一有保障的瓶颈是前端总线)。
如果您想知道您的应用程序可以使用多少RAM,就像您建议的那样,这是一个很好的开始,但是如果您已经在生产中使用了这个系统(听起来像您这样做),并且您的生产系统正在交换您的任务,那么您的任务就更容易了:找出您正在使用的交换空间-->添加至少2倍的RAM (为了适应您的系统的DIMM大小约束)。
如果您执行负载测试以获得粗略的数字并从中推断,请记住要考虑以下几点:
发布于 2012-02-15 11:35:22
谢谢,更新至少给大家一条线索。你正在考虑2Tb的记忆,这意味着你在一个与通常的设置不同的地方玩。大系统。我不愿想到要释放出多少热量。
考虑到这是一个内部服务器进程,并且内存正在耗尽(您没有说明从哪个级别开始分页),但是我希望消除服务器进程正在消耗更多内存的可能性,然后再进行下一步。如果这种情况发生了,你所做的就没有什么不同了,系统会在某一时刻停止。
我不知道有什么通用的工具,你可以用来给你更多的基本概述发生了什么……窗户带来了什么。服务流程本身是一个黑匣子,开发团队需要提供监视工具。
快速返回信封计算:
2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session这不会超出正常.net exe工作集的范围。
服务有多个线程吗?如果他们要为每个连接启动一个线程,那么应该看看他们是如何做到这一点的。微软的ProcExp.exe是一种简单的方法,可以查看您是否有多个线程,以及这些线程正在消耗什么。它不知道.net,但会给您win32计数器。
您能指出在开始分页之前进行测试时有多少内存和多少连接吗?
那么,如何确定服务器进程是否存在内存泄漏问题?它可以通过连接每个会话来积累更多的内存,也可能是在积累内存,而不是永远释放它们。
您可以做的是-选择一些不会引发分页的会话,并模拟这个数目的连接。-运行几个小时的模拟,并使用perfmon监视基本内存计数器。-对短时间连接和断开连接的会话重复这些测试。
这样做的目的是查看服务是否在每个会话中消耗越来越多的内存,或者打开的会话是否会引起内存使用量的不断增加。
https://serverfault.com/questions/359518
复制相似问题