Process

為什麼“ipcs -m”只顯示一個程序?

  • September 16, 2020

我想了解共享記憶體是如何在伺服器上執行的不同程序之間使用的,並且得到的印像是“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 使用共享記憶體,因為它是您伺服器上唯一使用它的程序。

引用自:https://serverfault.com/questions/1034162