1. 程式人生 > >共享記憶體、訊息佇列、訊號量之ipcs命令詳解

共享記憶體、訊息佇列、訊號量之ipcs命令詳解

中介軟體中我們常通過啟動多個程序來提高其執行的穩定性,而共享記憶體、訊息佇列、訊號量等技術保證了多程序間的通訊。

在Linux系統中通過自帶的ipcs命令工具,可檢視當前系統中以上三項的使用情況,從而利於定位多程序通訊中出現的通訊問題。

ipcs -h檢視該命令的使用幫助

[[email protected] ~]# ipcs -h

Usage:
 ipcs [resource ...] [output-format]
 ipcs [resource] -i <id>


Options:
 -i, --id <id>  print details on resource identified by id
 -h, --help     display this help and exit
 -V, --version  output version information and exit


Resource options:
 -m, --shmems      shared memory segments
 -q, --queues      message queues
 -s, --semaphores  semaphores
 -a, --all         all (default)


Output format:
 -t, --time        show attach, detach and change times
 -p, --pid         show creator and last operations PIDs
 -c, --creator     show creator and owner
 -l, --limits      show resource limits
 -u, --summary     show status summary
     --human       show sizes in human readable format
 -b, --bytes       show sizes in bytes
------------------------------------------------------------------------------------------------------------

ipcs -a 檢視當前使用的共享記憶體、訊息佇列及訊號量所有資訊

[[email protected] ~]# ipcs -a

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    


------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x6c001f61 32768      root       600        292944     6                       


------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x7a001f61 163840     root       600        12        
0x00000000 196609     nobody     600        1         
0x00000000 262146     nobody     600        1         
0x00000000 294915     nobody     600        1         
0x00000000 327684     nobody     600        1         
0x00000000 491525     nobody     600        1   
1、訊號量在建立時分 訊號量集和訊號量的概念。

Semaphore Arrays下面每一行代表一個訊號量集

perms對應訊號集的許可權

nsems對應訊號量集中訊號量個數

2、訊息佇列Message Queues

msqid對應建立佇列時得到的id值

messages對應當前佇列中存在的訊息個數

used-bytes對應當前所有訊息佔用的位元組數,所以單個訊息位元組數=總位元組數/訊息個數;如果訊息個數不為零則說明訊息佇列中有訊息未及時處理,可以判斷是否存在佇列阻塞風險。

------------------------------------------------------------------------------------------------------------

ipcs -p 可以得到共享記憶體、訊息佇列相關程序之間的訊息

[[email protected] ~]# ipcs -p


------ Message Queues PIDs --------
msqid      owner      lspid      lrpid     


------ Shared Memory Creator/Last-op PIDs --------
shmid      owner      cpid       lpid      
32768      root       12624      6914 

Message Queues PIDs中的msqid對應ipcs -a中的訊息佇列id,根據id則可以獲取lspid、lrpid訊息;

lspid代表最近一次向訊息佇列中發生訊息的“程序號”

lrpid代表最近一次從訊息佇列中讀取訊息的“程序號”。

注意:此處的程序號是弱程序號,既它有可能代表的是執行緒號,如果程序中是起的執行緒對訊息佇列傳送、接收訊息,則此處pid對應的均是執行緒號。可以採用ps -AL | grep pid來查詢該執行緒對應的程序id。

------------------------------------------------------------------------------------------------------------

ipcs -u 檢視各個資源的使用總結資訊

[[email protected] ~]# ipcs -u

------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes

------ Shared Memory Status --------
segments allocated 1
pages allocated 129
pages resident  129
pages swapped   0
Swap performance: 0 attempts0 successes


------ Semaphore Status --------
used arrays = 2
allocated semaphores = 14

可以看到使用的訊號量集的個數、訊號量個數,以及訊息佇列中當前使用的訊息個數總數、佔用的空間位元組數。

------------------------------------------------------------------------------------------------------------

ipcs -l  檢視各個資源的系統限制資訊,可以看到系統允許的最大訊號量集及訊號量個數限制,最大的訊息佇列中訊息個數等資訊。

[[email protected] ~]# ipcs -l


------ Messages Limits --------
max queues system wide = 7578
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384


------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1


------ Semaphore Limits --------
max number of arrays = 128訊號量集最大個數
max semaphores per array = 250每個訊號量集中訊號量最大個數
max semaphores system wide = 32000所有訊號量最大個數
max ops per semop call = 32每個訊號量同時被呼叫的次數
semaphore max value = 32767

相關推薦

共享記憶體訊息佇列訊號ipcs命令

中介軟體中我們常通過啟動多個程序來提高其執行的穩定性,而共享記憶體、訊息佇列、訊號量等技術保證了多程序間的通訊。 在Linux系統中通過自帶的ipcs命令工具,可檢視當前系統中以上三項的使用情況,從而利於定位多程序通訊中出現的通訊問題。 ipcs -h檢視該命令的使用幫助

Linux:程序間通訊(匿名管道命名管道)(共享記憶體訊息佇列訊號

目錄 程序間通訊的介紹 管道 匿名管道 原理: 程式碼實現 匿名管道特性 實現管道符 |  命名管道 命名管道特性 程式碼實現 管道讀寫規則 作業系統中ipc的相關命令 共享記憶體(重點) 生命週期: 程式碼實現 程式碼實現獲

管道訊息佇列共享記憶體訊號的特點

在之前我們已經瞭解過了程序間通訊的幾種方式:管道、訊息佇列、共享記憶體以及訊號量。今天我們就來總結一下這幾種方式的各自的特點分別是什麼,和他們相應的應用場景。也是對於這個知識點的一個複習和鞏固。 Q1

人工智慧(PythonNet)—— 程序間通訊(管道訊息佇列共享記憶體訊號訊號套接字)

一、程序間通訊        程序間通訊(IPC,InterProcess Communication)是指在不同程序之間傳播或交換資訊。        由於每個程序的空間是互相獨立的,程序之間無法互相直接獲取彼此的資源,故引入程序間通訊來實現程序間的資源互動。       

程序間通訊(IPC)-管道訊息佇列共享記憶體訊號訊號套接字

多程序:首先,先來講一下fork之後,發生了什麼事情。由fork建立的新程序被稱為子程序(child process)。該函式被呼叫一次,但返回兩次。兩次返回的區別是子程序的返回值是0,而父程序的返回值則是新程序(子程序)的程序 id。將子程序id返回給父程序的理由是:因為一

Linux下程序間通訊方式管道訊號共享記憶體訊息佇列訊號套接字

/* 1,程序間通訊 (IPC ) Inter-Process Communication   比較好理解概念的就是程序間通訊就是在不同程序之間傳播或交換資訊。 2,linux下IPC機制的分類:管道、訊號、共享記憶體、訊息佇列、訊號量、套接字 3,這篇主要說說管

作業系統(11)程序--程序通訊:訊號管道訊息佇列共享記憶體

文章目錄 1. 程序通訊相關概念 1. 通訊流程、屬性、鏈路 2. 程序通訊方式:直接通訊、間接通訊 2. 程序通訊的機制 1. 訊號 2. 管道 3. 訊息佇列

程序間通訊的方式——訊號管道訊息佇列共享記憶體

多程序: 首先,先來講一下fork之後,發生了什麼事情。 由fork建立的新程序被稱為子程序(child process)。該函式被呼叫一次,但返回兩次。兩次返回的區別是子程序的返回值是0,而父程序的返回值則是新程序(子程序)的程序 id。將子程序id返回給父程序的理由是

程序通訊---管道訊息佇列共享記憶體

程序通訊分為低階通訊和高階通訊。 低階通訊是指程序互斥與同步,包括訊號、訊號量、管程等。 高階通訊方式有管道、訊息佇列、共享記憶體以及網路通訊中的套接字。 匿名管道PIPE: 管道是連線兩個程序的檔案,

Linux程序間通訊--訊號,管道,訊息佇列訊號共享記憶體,socket

Linux 傳統的程序間通訊有很多,如各類管道、訊息佇列、記憶體共享、訊號量等等。但它們都無法介於核心態與使用者態使用,原因如表 通訊方法 無法介於核心態與使用者態的原因 管道(不包括命名管道) 侷限於父子程序間的通訊。 訊息佇列 在硬、軟中斷中無法無阻塞地接收資料。 訊號量 無法介於核

管道訊息佇列共享記憶體之間的區別與聯絡

 管道和訊息佇列的區別 管道(PIPE)      管道通訊方式的中間介質是檔案,通常稱這種檔案為管道檔案。兩個程序利用管道檔案進行通訊時,一個程序為寫程序,另一個程序為讀程序。寫程序通過寫

實現訊號(三) 訊息佇列實現訊號

        前一篇使用管道實現訊號量,本文使用訊息佇列實現訊號量。其原理和管道一樣,都是通過在訊息佇列裡面寫入一個字元,讀取一個字元。這裡就不再多說了,直接上程式碼。         msg_sem.hpp 檔案 #ifndef MSG_SEM_HPP #define

對Linux中訊息佇列訊號集合的理解

訊息佇列和訊號量集合同樣作為程序間通訊的重要手段,是LInux程式設計必需理解的內容,但兩者類似的操作和檔案結構讓很多人不能理解其中的原理。下面我來介紹下我的理解: 在使用訊息佇列和訊號量集合前都必須使用的一個函式Key_t ftok(char *pathname,char

訊息佇列RabbitMQ入門與5種模式

1.RabbitMQ概述 簡介: MQ全稱為Message Queue,訊息佇列是應用程式和應用程式之間的通訊方法; RabbitMQ是開源的,實現了AMQP協議的,採用Erlang(面向併發程式語言)編寫的,可複用的企業級訊息系統; AMQP(高階訊息佇列協議)

linux命令dd命令和/dev/zero/dev/null

主要內容來自:http://www.cnblogs.com/dkblog/archive/2009/09/18/1980715.html dd 是 Linux/UNIX 下的一個非常有用的命令,作用是用指定大小的塊拷貝一個檔案,並在拷貝的同時進行指定的轉換(convert

Linux 學習筆記—程序通訊 訊息佇列訊號共享記憶體的概念區別聯絡

2.5 訊息佇列(Message queues) 訊息佇列是核心地址空間中的內部連結串列,通過linux核心在各個程序直接傳遞內容,訊息順序地傳送到訊息佇列中,並以幾種不同的方式從佇列中獲得,每個訊息佇列可以用IPC識別符號唯一地進行識別。核心中的訊息佇列是通過

Linux程序間通訊訊號(semaphore)訊息佇列(Message Queue)和共享記憶體(Share Memory)

System V 程序通訊方式:訊號量(semaphore)、訊息佇列(Message Queue)和共享記憶體(Share Memory) 訊號量 訊號量(semaphore)實際是一個整數,它的值由多個程序進行測試(test)和設定(set)。就每個程序所關心的測試和

IPC通訊訊息佇列訊號共享記憶體

    有三種IPC我們稱作XSI IPC,即訊息佇列,訊號量以及共享儲存器。XSI IPC源自System V的IPC功能。由於XSI IPC不使用檔案系統的名稱空間,而是構造了它們自己的名字空間,

【Linux】程序間通訊訊息佇列訊號共享儲存

訊息佇列、訊號量和共享儲存是IPC(程序間通訊)的三種形式,它們功能不同,但有相似之處,下面先介紹它們的相似點,然後再逐一說明。 1、相似點 每個核心中的IPC結構(訊息佇列、訊號量和共享儲存)都用一個非負整數的識別符號加以引用,與檔案描述符不同,當一個

【linux開發】程序間通訊命名管道-共享記憶體-記憶體對映-訊息佇列-訊號

程序間通訊命名管道-共享記憶體-記憶體對映-訊息佇列-訊號量  在Unix平臺上,建立命名管道是建立了一個fifo檔案,和在shell下面用mkfifo命令的效果是一樣的。看起來這個管道檔案就是一個普通的檔案系統瓜掛載點,但是它只不過是作為一個名稱存在,實際的內容是一塊系統