ipcs命令詳解


  

基礎命令學習目錄首頁

 

多進程間通信常用的技術手段包括共享內存、消息隊列、信號量等等,Linux系統下自帶的ipcs命令是一個極好的工具,可以幫助我們查看當前系統下以上三項的使用情況,從而利於定位多進程通信中出現的通信問題。目前也有一些帖子介紹ipcs命令的使用方法,但是介紹較簡單不夠全面,下面我根據個人的使用經驗詳細介紹下ipcs命令的使用方法。
ipcs -h可以查看該命令的使用幫助:

 

ipcs -a命令可以查看當前使用的共享內存、消息隊列及信號量所有信息,對於該選項對應的結果,介紹以下幾個部分:
1、信號量在創建時分信號量集和信號量的概念,該命令的查詢結果中,Semaphore Arrays下面每一行代表一個信號量集,其中perms對應信號量集的權限,nsems對應信號量集中信號量的個數,對於信號量集的創建方法可以查詢semctl相關的函數使用方法。
2、對於消息隊列Message Queues而言,可以看到msqid對應創建隊列時得到的id值,從messages中可以看到當前隊列中存在的消息個數,從used_bytes中可以看到當前所有消息占用的字節數,所以單個消息的字節數則為總字節數除以消息數,同時如果消息個數不為零則說明消息隊列中的消息沒有得到及時處理,可以據此判斷是否存在隊列阻塞的風險。

 

ipcs -p命令可以得到與共享內存、消息隊列相關進程之間的消息。對於此選項,有如下介紹:
1、從該命令結果中可以看到Message Queues PIDs中的msqid既對應上條命令結果中的消息隊列id,根據id則可以獲取到lspid、lrpid消息,其中lspid代表最近一次向消息隊列中發送消息的“進程號”,lrpid對應最近一次從消息隊列中讀取消息的“進程號”。但請注意:此處的進程號是弱進程號,既它有可能代表的是線程號,如果進程中是起的線程對消息隊列發送、接收消息,則此處pid對應的均是線程號。可以采用ps -AL | grep pid來查找該線程對應的進程id。

 

ipcs -u命令可以查看各個資源的使用總結信息,其中可以看到使用的信號量集的個數、信號量的個數,以及消息隊列中當前使用的消息個數總數、占用的空間字節數。

 

ipcs -l命令可以查看各個資源的系統限制信息,可以看到系統允許的最大信號量集及信號量個數限制、最大的消息隊列中消息個數等信息。
1、從中可以看到以下信號量的限制信息,其中信號量集最大個數為128、每個信號量集中信號量最大個數為250、所有信號量最大個數為32000、每個信號量可以被同時調用的次數為32,這些參數是linux系統下的默認參數,對於限制參數也可以做一定程度的優化,會有一定程度上性能的提升,具體優化方法可以搜索相關帖子。
ipcs命令常用的功能已經做了較為詳細的解釋,如果還有不明白的地方我們一起探索。
---------------------
作者:axiaochong
來源:CSDN
原文:https://blog.csdn.net/dalongyes/article/details/50616162
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

ipcs

1. 命令格式

  ipcs [resource-option] [output-format]
  ipcs [resource-option] -i id

2. 命令功能

  提供IPC設備的信息

3. 使用方法

 resource選項:

  ipcs -m  查看系統共享內存信息

  ipcs -q  查看系統消息隊列信息

  ipcs -s  查看系統信號量信息

  ipcs [-a] 系統默認輸出信息,顯示系統內所有的IPC信息

復制代碼
[martin@localhost data]$ ipcs -a ------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 229376     martin     600        4194304    2          dest         
0x00000000 196609     martin     600        524288     2          dest         
0x00000000 327682     martin     600        393216     2          dest         
0x00000000 491525     martin     600        2097152    2          dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
復制代碼

 

 輸出格式控制:

  ipcs -c  查看IPC的創建者和所有者

  ipcs -l  查看IPC資源的限制信息

  ipcs -p  查看IPC資源的創建者和使用的進程ID

  ipcs -t  查看最新調用IPC資源的詳細時間

  ipcs -u  查看IPC資源狀態匯總信息

復制代碼
[martin@localhost data]$ ipcs -u --human ------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0B

------ Shared Memory Status --------
segments allocated 4
pages allocated 1760
pages resident  339
pages swapped   0
Swap performance: 0 attempts     0 successes

------ Semaphore Status --------
used arrays = 0
allocated semaphores = 0
復制代碼

 

 額外格式控制:

  ipcs -l --human

    以人類可以閱讀的方式顯示size

復制代碼
[martin@localhost data]$ ipcs -l --human ------ Messages Limits --------
max queues system wide = 3644
max size of message = 8K
default max size of queue = 16K

------ Shared Memory Limits --------
max number of segments = 4096
max seg size = 16E
max total shared memory = 16E
min seg size = 1B

------ 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 = 3276
復制代碼

 

ipcrm

1. 命令功能

  通過指定ID刪除刪除IPC資源,同時將與IPC對象關聯的數據一並刪除,只有超級用戶或IPC資源創建者能夠刪除

2. 使用方法

  ipcrm -M shmkey

    移除用shmkey創建的共享內存段

  ipcrm -m shmid

    移除用shmid標識的共享內存段

  ipcrm -S semkey

    移除用semkey創建的信號量

  ipcrm -s semid

    移除用semid標識的信號量

  ipcrm -Q msgkey

    移除用msgkey創建的消息隊列

  ipcrm -q msgid

    移除用msgid標識的消息隊列

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM