如何清理 WT 中的内存?

Posted

技术标签:

【中文标题】如何清理 WT 中的内存?【英文标题】:How to clean up memory in WT? 【发布时间】:2013-02-27 15:38:21 【问题描述】:

2013 年 3 月 27 日更新

看来我没有泄漏内存,只是每次按下 F5 或新用户连接时 WT 都没有保持持久会话。基本上,旧会话被删除,每次按 F5 或新用户从另一台机器连接时都会创建一个新会话。我已经阅读了文档的某些部分,其中提到了使会话持久化,因此当用户重新加载页面或不同的用户连接时,他们都会看到相同的内容。但是,我还不能让它工作。我认为这是 wt_config.xml 文件中的函数调用或设置。如果我有任何其他进展,会更新。

原帖

所以我的问题是,我如何清理 WT 中的内存,以便每次用户在页面上按 F5 时内存使用在任务管理器中保持不变?

好的,所以我正在使用 WT 发音(诙谐),我注意到每次用户在页面上按 F5 刷新它时,我的服务器应用程序都会消耗更多内存,这对我来说看起来像是在泄漏内存,但是我遵循与 WT 大多数基本应用程序相同的流程...

所以,我回到了我能找到的最基本的 WT 应用程序,如果您没有亲自构建项目,可以在此处找到代码和工作示例的 hello 应用程序。

在我的机器上运行示例并在页面上按 F5 后,我的任务管理器中的内存增加了。

我可能怀疑是下面的这个函数。

WApplication *createApplication(const WEnvironment& env)

  /*
  * You could read information from the environment to decide whether
  * the user has permission to start a new application
  */
  return new HelloApplication(env);

每次按下 F5 时都会调用它,并创建一个继承自 WApplication 的 HelloApplication 的新实例。

我尝试补救的一些事情没有奏效,包括: 为 HelloApplication 保留 2 个指针,这样我可以在每次分配新指针时删除旧指针。调用 quit() 函数,并删除指针。只需调用 quit() 函数。我还在 WT 文档站点 (http://www.webtoolkit.eu/wt/doc/reference/html/index.html) 上查看了有关该类及其方法的更多详细信息,但没有找到任何可行的方法。

我要求任何回复的人尽可能详细地说明如何处理内存清理。一个例子将不胜感激,在此先感谢!

【问题讨论】:

我在启动并运行自己 ***.com/questions/15193585/… 后遇到了内存问题 更新了,不是内存泄漏。 【参考方案1】:

您还必须注意,从 Wt 3.3.0 开始,只有在收到请求时才会清理会话(请参阅 Wt 开发人员的this reply)。为了克服这个限制,开发人员建议使用类似于以下代码的内容。

static bool terminating = false;

void
callRepeatedly(boost::function<void()> function, int seconds)

    if (!terminating) 
        Wt::WServer::instance()->ioservice().schedule(
            seconds * 1000, boost::bind(callRepeatedly, function, seconds));
    
    function();


int
main(int argc, char** argv)

    ...

    callRepeatedly(boost::bind(&Wt::WServer::expireSessions, &server), 60);
    Wt::WServer::waitForShutdown();
    terminating = true;
    server.stop();

    ...

【讨论】:

有趣,我得试试这个!当我得到一些工作时,我会发布更新。【参考方案2】:

WApplication 的手册说你在调用 createApplication 回调时创建它,而 Wt 在调用 quit 和会话超时时删除它。默认会话超时时间为 10 分钟 (wt_config.xml),因此这可能是您最初按 F5 时内存消耗增加的原因。

http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#details

解释您所看到的不同之处:操作系统报告的内存消耗不是确定应用程序是否泄漏内存since free does not really return the memory to the OS 的可靠方法。使用适当的内存检查工具,例如 valgrind。

【讨论】:

嗯,你帮我注意到这不是内存泄漏。也做了更新。

以上是关于如何清理 WT 中的内存?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WEnviroment 读取 Wt 中的原始请求正文?

如何将 Ace 编辑器中的所有文本保存在 WT 中?

怎么能释放手机内存

解析PHP中的内存管理,PHP动态分配和释放内存

如何保存 Rstudio 历史中的所有图表

linux下清理内存以及swap