如何查看Linux的RAM视图以确定碎片

Fla*_*ius 26 linux ram

我所知道的唯一相关程序是pmap,但这只打印了一个进程的内存.

我想看看物理内存是如何被占用的,以及整个物理RAM的进程/库(包括内核)(与进程'POV pmap)相比.

理想情况下还有图形界面.

你知道有没有这样的工具?

我知道图书馆引入的歧义.如果是这种情况,它可以显示1像素宽的线和箭头到该库的实际位置.

我需要什么呢?查看RAM碎片.

小智 32

内存碎片

当Linux系统运行一段时间后,内存碎片会增加,这在很大程度上取决于其上运行的应用程序的性质.分配和释放内存的进程越多,内存就越快碎片化.并且内核可能并不总是能够按时对所需大小进行碎片整理.如果发生这种情况,即使有足够的可用内存,应用程序也可能无法分配更大的连续内存块.从2.6内核(即RHEL4和SLES9)开始,内存管理得到了极大的改进,内存碎片问题变得越来越少.

要查看内存碎片,您可以使用神奇的SysRq密钥.只需执行以下命令:

# echo m > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

此命令将当前内存信息转储到/ var/log/messages.以下是RHEL3 32位系统的示例:

Jul 23 20:19:30 localhost kernel: 0*4kB 0*8kB 0*16kB 1*32kB 0*64kB 1*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1952kB)
Jul 23 20:19:30 localhost kernel: 1395*4kB 355*8kB 209*16kB 15*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 12244kB)
Jul 23 20:19:31 localhost kernel: 1479*4kB 673*8kB 205*16kB 73*32kB 21*64kB 847*128kB 473*256kB 92*512kB 164*1024kB 64*2048kB 28*4096kB = 708564kB)
Run Code Online (Sandbox Code Playgroud)

第一行显示DMA内存碎片.第二行显示低内存碎片,第三行显示高内存碎片.输出显示低内存区域中的内存碎片.但是高内存区域有许多大内存块,例如28 4MB.

如果未将内存信息转储到/ var/log/messages,则未启用SysRq.您可以通过将sysrq设置为1来启用SysRq:

# echo 1 > /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)

从2.6内核(即RHEL4和SLES9)开始,您不需要SysRq来转储内存信息.您只需检查/ proc/buddyinfo是否存在内存碎片.

以下是运行2.6内核的64位服务器的输出:

# cat /proc/buddyinfo

Node 0, zone DMA 5 4 3 4 3 2 1 0 1 1 2
Node 0, zone Normal 1046 527 128 36 17 5 26 40 13 16 94
# echo m > /proc/sysrq-trigger
# grep Normal /var/log/messages | tail -1
Jul 23 21:42:26 localhost kernel: Normal: 1046*4kB 529*8kB 129*16kB 36*32kB 17*64kB 5*128kB 26*256kB 40*512kB 13*1024kB 16*2048kB 94*4096kB = 471600kB
#
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我再次使用SysRq来显示/ proc/buddyinfo中引用的每个数字.

资料来源:http://www.puschitz.com/pblog/

  • 一个重要的细节:_applications_无论如何都不分配连续的内存块 - 它们只能访问虚拟内存*.只有内核需要连续的物理块 - 这就是物理RAM碎片可能成为问题的地方. (2认同)
  • 这里有一个小小的测试来检查:`char*p = malloc(256*1024*1024);`它应该在大多数现代系统上都能很好地成功,只要它们不在内存消耗的边缘. (2认同)
  • 嗯...从技术上讲,你还需要一个`memset()`调用或者某些东西来避免过度使用...... (2认同)