【问题标题】:C++ Multithread program on linux memory issue关于linux内存问题的C++多线程程序
【发布时间】:2012-08-08 10:59:51
【问题描述】:

我正在开发一个需要创建和删除大量线程的软件。

当我创建一个线程时,内存会增加,而当我删除它们时(使用命令ps -mo THREAD -p <pid> 确认),与程序/软件相关的内存不会减少(top 命令)。结果我的内存用完了。

我已经使用 Valgrind 检查内存错误/泄漏,但我找不到。这是在一个Debian盒子上。请让我知道可能是什么问题。

【问题讨论】:

  • 你怎么理解,你的内存用完了?使用free -m 还是因为内存不足导致程序崩溃?
  • 程序崩溃之前可以通过top命令识别

标签: c++ multithreading memory-leaks debian


【解决方案1】:

你是如何删除线程的? http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.html 这里的注释谈到在某些情况下需要调用 join 来释放资源。

【讨论】:

  • 调用 join 没有成功,但调用 pthread_detach() 有效。谢谢
  • 如果您连续创建和删除大量线程,您可能会考虑使用线程池来代替......我必须知道这是否适用于您的应用程序
  • 是的。目前我正在使用线程池。但我有大量大小不断变化的小池。调查这是否会导致性能问题,如果是,则考虑更改设计。
【解决方案2】:

您不会耗尽内存。

您在 top 命令中看到的“空闲内存”实际上并不是需要时可用的内存。 Linux 内核尽可能多地/可用的空闲内存用于其页面缓存。当进程需要内存时,内核可以丢弃该页面缓存并将该内存提供给进程。

换句话说:linux使用空闲内存,而不是让它闲置......

使用free -m:在标有“-/+ 缓冲区/缓存:”的行中,您将看到进程可用的实际内存量。

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2011-09-29
    • 2013-05-24
    • 2014-03-12
    • 2021-05-23
    • 1970-01-01
    • 2012-06-14
    • 2016-09-11
    • 2011-05-22
    相关资源
    最近更新 更多