我们有一个多线程客户端服务器项目,我们最近升级了64位架构的服务器端应用程序。解决了许多问题,我们的应用程序现在在沉重的负荷下稳定地工作了一周。但是在这段时间之后,服务器上的应用程序会出现“内存不足”错误。此时,空闲内存大量可用,似乎存在内存碎片的问题。是否有可能整理内存和一些工具?或者是在类似的情况下“记忆不足”的其他原因?
内存分配:
发布于 2013-12-26 05:58:25
正如你所推测的,你的问题是支离破碎。你不能做任何事情来整理内存--任何尝试这样做的工具都必须有一个完整的程序指针的映射。请注意,即使是.NET的垃圾收集器也无法用大对象堆完成这一任务,我已经崩溃了一个只有100‘t实际使用的32位网络应用程序。
相反,您需要做的是首先避免碎片。通常,这意味着对象池,保存旧对象以供重用,而不是释放它们,然后再重新分配它们。
发布于 2013-12-26 07:02:33
另一种选择(如果服务不是时间关键且需要100%每秒在线)是每24小时左右重新启动您的服务(通过任务调度程序或在您自己的程序中)。
如果在您自己的程序中,您可以通过以下两种方式之一来实现它,这取决于您所拥有的服务类型(如果您的服务可以在相同的短时间内存在两个实例):
1) Execute a second instance of your service from within your currently running service and then terminate
2) Execute a tiny helper program that waits f.ex. 5 seconds and then (re)starts your service, then terminate your currently running service但最好的方法是首先避免分裂,就像洛伦·佩克特尔所写的那样。
https://stackoverflow.com/questions/20779532
复制相似问题