共享記憶體、訊息佇列、訊號量之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 |
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命令的效果是一樣的。看起來這個管道檔案就是一個普通的檔案系統瓜掛載點,但是它只不過是作為一個名稱存在,實際的內容是一塊系統