我想了解共享内存是如何在服务器上运行的不同进程之间使用的,并且得到的印象是“ipcs -m”命令可以用于此目的。所以当我尝试时,我得到了这个:
# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0052e2c1 327680 postgres 600 66084708352 27
这是在一个服务器上,除了 postgresql 之外,它还运行 tomcat、nginx 和其他一些程序。为什么输出中没有显示其他进程?
该命令
ipcs -m
将列出用于进程间通信的内存,即不同进程用于共享数据的内存;这通常在两个进程需要在它们之间传递数据时完成,因为比使用网络套接字或命名管道更有效;一个典型的使用场景是连接到在同一台机器上运行的数据库的进程,这似乎正是您的服务器上正在发生的事情。请注意,为了使用共享内存,两个进程都需要明确地这样做;这不是操作系统为他们做的事情,而是一种编程技术。
数据库服务器向其客户端提供这种连接选项是很常见的,尤其是对于那些客户端和服务器都在同一系统上运行的场景;但是为什么 fe Tomcat 或 Nginx(或任何随机程序)想要使用共享内存呢?与谁分享什么?他们没有任何需要。它们是通过网络套接字接收请求的网络服务器。
TL;DR:您只能看到 PostgresSQL 使用共享内存,因为它是您服务器上唯一使用它的程序。