虚拟内存消耗pthreads

您好,我开发了一个multithreading的TCP服务器应用程序,允许10个并发连接从它们接收到连续的请求,经过一些处理请求后,将它们响应给客户端。 我正在使用基于TI OMAP l137处理器的主板运行Monta Vista Linux。 线程是为每个客户端创build的,即10个线程,它是预先线程化的。 根据ps,top和meminfo,物理内存使用率约为1.5,CPU使用率约为2%。 这是虚拟机使用率上升到80M,我有48M(我减less了从U引导到DSP预留一些内存)。 任何帮助表示赞赏,我怎么能减less它?(/ proc / sys / vm / ..技巧不帮助:)

谢谢。

您可以尝试在malloc()中使用垃圾收集替换 ,并查看是否解决了您的问题。 如果是这样,找到泄漏并修复它们,然后摆脱垃圾收集器。

在大多数堆分析器和分析器(如valgrind)没有完全支持(如果有的话)的平台上,这种“有趣”的方式来解决这些问题。

在另一个说明,给定的约束..我假设你已经减少了默认的线程堆栈大小? 我认为默认是8M,你可能不需要那么多。 如果你没有调整它,请参阅pthread_attr_setstacksize() 。

编辑

您可以使用pthread_attr_getstacksize()来检查默认的堆栈大小。 如果它是8M,你已经在线程创建期间(10个线程,如你所说)已经吹上了你的天花板。

大多数VM可能只是堆栈。 当然,它是虚拟的,所以如果你不使用它,它不会被提交。

(我想知道是否线程的默认堆栈大小与ulimit -s有任何关系)

显然是的,根据这个其他问题

它会上升到那个水平,并留在那里? 还是它最终耗尽内存? 如果是前者,你只需要找出一个办法来减小工作集。 如果后者,你有一个内存泄漏,需要修复它。