首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux中使用最大内存的程序

linux中使用最大内存的程序
EN

Stack Overflow用户
提问于 2015-02-13 06:14:48
回答 2查看 363关注 0票数 0

比方说,linux中运行着3-4个高度内存密集型的应用程序,例如,任何视频处理应用程序。这些应用程序使用不同数量的RAM,它们的内存访问模式也不同。另外,让我们说,这些应用程序运行在不同的核心。

假设所有这些程序运行5秒。

我想找的是-

  1. 在特定时刻使用最大内存的应用程序中有哪些功能?我需要前2-3个函数的名称,这些函数占用最大的内存资源.
  2. 如果多个函数同时需要大量的内存(超过阈值限制),那么它们的名称是什么,它们需要多少内存。

在这方面我需要一些帮助-坎特其实知道怎么继续。使用perf工具进行缓存丢失计算会有帮助吗?我是linux的新手,请给我一点解释。提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2015-02-13 10:42:37

您可以使用分析器、堆分析工具来获取每个方法的cpu和内存利用率。

分析器是将一些记录器/调试语句/自定义代码添加到应用程序代码中的工具,并将告诉您每个方法在应用程序中查询所花费的时间。这解决了您的第一个问题,即您希望使用哪种方法占用大部分cpu。运行时间最长的进程最有可能使用大多数cpu。分析器将向您展示这些过程。在此之后,您可以通过将调试语句和记录器向下钻取来分析方法。

程序使用内存来保存对象、变量。只需查看内存快照,就可以了解哪种方法/对象占用了较高的内存。您可以获得堆转储或内存快照(我不确定c、c++代码,但可能有可用的工具和命令)。获得这些快照后,分析它们是否占用了最大内存块的对象/方法。

在找到这些罪魁祸首后,尝试使用更好的hw、sw、库、perf调谐器等对其进行改进。

我希望你现在明白了:)

票数 2
EN

Stack Overflow用户

发布于 2015-02-13 06:17:52

您可以使用ps (可能与watch一起使用)、tophtop来查看进程的内存消耗。例如,如果您有三个pid 1234、2345和3456的进程 (您可以使用ps|grep programnamepidofpgrep等方法找到这些pids )。你可能会跑

代码语言:javascript
运行
复制
watch ps -F 1234 2345 3456

在特定时刻使用最大内存的应用程序中有哪些功能? 如果多个函数需要大量内存

我猜您在代码中提到的是C(或C++)函数。那么上面的两个问题都没有任何意义:内存消耗是程序的一个全局属性。当(经常发生这种情况)一个内存区域被分配到一个函数(调用malloc)中,填充另一个函数,然后在另一个函数中释放(调用free)时,它没有意义地说哪个函数拥有该数据或正在使用该内存。

您可以使用缬磨 (至少检查没有泄漏内存)。

还请注意,如果程序正确地调用了malloc,那么释放的内存并不总是返回给操作系统:大多数malloc实现都会尝试“保持”free-d内存,以便在以后调用malloc时立即重用。

阅读垃圾收集内存泄漏内存管理上的wikipage,特别是在C动态内存分配上。RTFM malloc(3) & mmap(2) (因为mmapmalloc使用)和proc(5) (因为/proc/可以用来查询内存映射和状态,使用cat /proc/$(pidof yourprogram)/maps等.)和极限(2) (它允许您限制bashulimit内置内存)& ps(1)C34& pgrep(1)和C 36。还读高级Linux编程

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

https://stackoverflow.com/questions/28493613

复制
相关文章

相似问题

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