Linux 如何分析进程中的内存分布?

Linux 如何分析进程中的内存分布?,linux,memory,memory-management,Linux,Memory,Memory Management,我有一个正在运行的(私有)服务器,它使用大约1.1G虚拟内存(1.0G物理内存)。虽然我有服务器的源代码,但我想找出更好的解决方案,用它来全面了解服务器中对象之间的内存分布?像这样的事情: HashTable: 50%, 500M PlayerCache: 20%, 200M OtherA: 10%, 100M ... 指针可能位于对象中并指向动态分配的内存。在Linux上,您可以使用和(顺便说一句,它们都使用/proc/,对您很有用) 因此,如果您的服务器有1234,您可以尝试在您的终

我有一个正在运行的(私有)服务器,它使用大约1.1G虚拟内存(1.0G物理内存)。虽然我有服务器的源代码,但我想找出更好的解决方案,用它来全面了解服务器中对象之间的内存分布?像这样的事情:

HashTable: 50%, 500M

PlayerCache: 20%, 200M

OtherA: 10%, 100M

...
指针可能位于对象中并指向动态分配的内存。

在Linux上,您可以使用和(顺便说一句,它们都使用
/proc/
,对您很有用)

因此,如果您的服务器有1234,您可以尝试在您的终端中使用
pmap 1234
cat/proc/1234/maps
,以了解您的流程。还可以尝试
cat/proc/1234/status

请记住,进程在中运行,每个进程都有自己的虚拟地址空间,物理RAM是由内核管理的资源。你可能会对

您不会有一个报告详细说明每种类型或每种变量的动态内存使用情况(因为这在一般情况下没有任何意义:例如,在C中,给定的
malloc
-ed内存区域可以通过不同类型的强制转换解除引用,并且可以通过多个变量(可能是间接地)访问)。如果您的程序正在使用,您可以使用(它可以提供有关内存区域大小的统计信息)

你可以使用,非常有用的狩猎

您可以修改服务器的源代码,以处理并按照自己的特定方式计算它正在做的事情。例如,如果您在C++中编写代码,您可以修改类的构造函数和析构函数,以增加和减少一些<代码>静态<代码>或全局计数器,或者提供一些类特定的<代码>运算符new < /Cord>和<代码>删除< /代码>。堆内存消耗是整个程序的属性(通常不与特定类型或变量相关联)。有些程序有自己的(特定类型)或使用基于竞技场的或

还可以阅读一些关于的内容,例如,获取有用的概念、术语和技术(例如,,,等等)。他们甚至对我们都很重要


内存管理和分配是每个程序特有的,特别是在编程语言中,如C或C++(或RIST),具有手动内存管理,其中约定非常重要,并且对每个程序都是特定的。研究现有各种服务器(例如,,,…)的源代码,你会发现它们在内存管理方面都有不同的约定。

你可以通过在服务器进程上附加一个调试器并检查变量的大小来实现。该服务器在做什么?是什么节目?它是多线程的吗?因此,编辑您的问题以改进它并获得更好的答案,而不需要额外的细节。这个问题太广泛,而且不清楚服务器是用什么编程语言编写的?您了解它的源代码吗?您是否愿意改进源代码(并以某种方式对其进行测试)?请进一步编辑您的问题;在几个段落中解释服务器在做什么,关于源代码的一些细节(编程语言,源代码的大小,熟悉程度)。也许在问题中展示一些你的源代码(最好是与你的代码相关的源代码…)为什么投否决票,因为我改进了我的答案,以解释OP的问题过于笼统,无法得到有用的具体答案,但我试着给出一些提示。我问了一些问题,然后删除了与我上述答案相关的内容。没有评论的反对票让我有点恼火