为什么“ipcs -m”只显示一个进程?

为什么“ipcs -m”只显示一个进程?

我想了解服务器上运行的不同进程之间如何使用共享内存,并认为“ipcs -m”命令可用于此目的。所以当我尝试时,我得到了这个:

# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status 
0x0052e2c1 327680     postgres   600        66084708352 27

这是一台服务器上,除了 postgresql,还运行着 tomcat、nginx 和一些其他程序。为什么输出中没有显示其他进程?

答案1

该命令ipcs -m将列出用于进程间通信的内存,即不同进程用来共享数据的内存;这通常在两个进程需要在它们之间传递数据时完成,因为它比使用网络套接字或命名管道更有效率;典型的使用场景是连接到在同一台机器上运行的数据库的进程,这似乎正是您的服务器上正在发生的事情。

请注意,为了使用共享内存,两个进程都需要明确地执行此操作;这不是操作系统为它们做的事情,而是一种编程技术。

数据库服务器向其客户端提供此连接选项是很常见的,特别是针对客户端和服务器都在同一系统上运行的场景;但是为什么 Tomcat 或 Nginx(或任何随机程序)要使用共享内存?与谁共享什么?它们不需要它。它们是通过网络套接字接收请求的网络服务器。

TL;DR:您只会看到 PostgresSQL 正在使用的共享内存,因为它是您的服务器上唯一使用它的程序。

相关内容