gpt4 book ai didi

multithreading - 如何确定进程中每个线程的内存消耗?

转载 作者:行者123 更新时间:2023-12-04 17:44:51 24 4
gpt4 key购买 nike

用 C 编写的多线程进程几乎耗尽了所有系统内存。为了找出消耗大部分内存的线程,我使用 gcore [pid] 创建了一个核心文件检查每个线程的内存使用情况,但我找不到这样做的方法。
ps -eLFlm和带有 -H 选项的 top 命令显示总内存消耗,但不是每个线程。

有什么有用的提示可以解决问题吗?

操作系统:Centos6

最佳答案

A multi-thread process written in C exhausts almost all of system memory. To find out the thread which is consuming most of the memory....



这个问题没有意义。根据定义,同一进程的所有线程共享相同的 virtual address space .您可以使用 proc(5) 以编程方式查询它(例如 reading /proc/self/maps 来自您的程序)。

有可能(而且很常见)在线程 A 中分配了一些堆内存(例如使用 malloc ),稍后会在其他一些线程 B(通常是主线程,只是退出前)。

C dynamic memory management根据定义,堆是整个程序的属性。

一个典型的例子是最后一个 free论据 pthread_create(3) .它通常应该是堆分配的。您可以记录并采用调用线程(使用 arg 的线程)将 pthread_create 的约定。它,但创建的线程应该 malloc它(你可以要求每个 free 传递给 start_routine 应该 pthread_createfree )。

Is there any useful tip to solve the problem?



也许 valgrind可能会帮助您找到您的 memory leaks .你最好用 DWARF 编译你所有的程序(也许还有一些相关的库)调试信息(例如编译 with arg )然后重新启动你的程序。但是这样的错误很难找到,所以准备好花几个星期的时间来研究它们。

从概念上看 garbage collection的“理论” (还有 smart pointersRAII ,也许 reference counting 等...)可能会有所帮助。所以阅读 GC handbook (它介绍了好的概念和术语,并解释了内存管理是一个整个程序的问题)。许多概念甚至与非 GC ed 语言(如 C 或 C++)中的程序相关。

您需要 定义并遵循一些关于内存管理的足够好的整个程序约定 (这很困难)。

关于multithreading - 如何确定进程中每个线程的内存消耗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52601090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com