关于 Linux top 实用程序中共享内存列的说明

关于 Linux top 实用程序中共享内存列的说明

我们在 Linux 下运行的程序遇到了内存分配问题。我们正在使用 top 实用程序尝试确定问题的根本原因。我们注意到的一件事是,一个进程的共享内存值过高(top 中的 SHR 列)。

阅读 top 的 MAN 页面后,我相信 SHR 列表示通过共享内存进行进程间通信的内存量。这是正确的吗?

如果是这样,那么为任何进程分配 50 – 60 兆字节的共享内存是否有意义(X11 仅分配 11MB,根据它必须执行的操作,这似乎是合理的)。

谢谢...

答案1

自发性高血压列仅表示进程使用的共享内存量。它可用于进程间通信,但更常见的情况是,这是应用程序链接的共享库使用的内存。

Linux 内核:内存管理

共享虚拟内存

尽管虚拟内存允许进程拥有单独的(虚拟)地址空间,但有时您需要进程共享内存。例如,系统中可能有多个进程运行 bash 命令 shell。与其在每个进程的虚拟地址空间中拥有多个 bash 副本,不如在物理内存中只拥有一个副本,并且所有运行 bash 的进程都共享它。动态库是执行多个进程之间共享代码的另一个常见示例。

共享内存还可用作进程间通信 (IPC) 机制,两个或多个进程通过它们共用的内存交换信息。Linux 支持 Unix TM System V 共享内存 IPC。

什么顶部手册页中关于此专栏的说明:

   t: SHR  --  Shared Mem size (kb)
      The amount of shared memory used by a task.  It simply reflects mem‐
      ory that could be potentially shared with other processes.

答案2

任何进程分配 50 - 60 兆字节的共享内存是否有意义

是的。

例如,Oracle 调优指南建议共享内存大小为 GB。

话虽如此,如果该过程是“cat”,那么可能没有多大意义。

相关内容