首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德尔福XE4 64位内存不足

德尔福XE4 64位内存不足
EN

Stack Overflow用户
提问于 2013-12-26 05:20:08
回答 2查看 621关注 0票数 0

我们有一个多线程客户端服务器项目,我们最近升级了64位架构的服务器端应用程序。解决了许多问题,我们的应用程序现在在沉重的负荷下稳定地工作了一周。但是在这段时间之后,服务器上的应用程序会出现“内存不足”错误。此时,空闲内存大量可用,似乎存在内存碎片的问题。是否有可能整理内存和一些工具?或者是在类似的情况下“记忆不足”的其他原因?

内存分配:

  1. 内存总量:96 of
  2. 实物:48
  3. 虚拟:48
  4. 崩溃时的可用物理内存量: 3GB
  5. 崩溃时的空闲虚拟内存量:45 at
  6. 每个线程分配的最大内存大小: 1GB
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-26 05:58:25

正如你所推测的,你的问题是支离破碎。你不能做任何事情来整理内存--任何尝试这样做的工具都必须有一个完整的程序指针的映射。请注意,即使是.NET的垃圾收集器也无法用大对象堆完成这一任务,我已经崩溃了一个只有100‘t实际使用的32位网络应用程序。

相反,您需要做的是首先避免碎片。通常,这意味着对象池,保存旧对象以供重用,而不是释放它们,然后再重新分配它们。

票数 4
EN

Stack Overflow用户

发布于 2013-12-26 07:02:33

另一种选择(如果服务不是时间关键且需要100%每秒在线)是每24小时左右重新启动您的服务(通过任务调度程序或在您自己的程序中)。

如果在您自己的程序中,您可以通过以下两种方式之一来实现它,这取决于您所拥有的服务类型(如果您的服务可以在相同的短时间内存在两个实例):

代码语言:javascript
复制
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

但最好的方法是首先避免分裂,就像洛伦·佩克特尔所写的那样。

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

https://stackoverflow.com/questions/20779532

复制
相关文章

相似问题

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