ipcs命令詳解

  

基礎命令學習目錄首頁html

 

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

 

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

 

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

 

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

 

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

ipcs

1. 命令格式linux

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

2. 命令功能ide

  提供IPC設備的信息函數

3. 使用方法
工具

 resource選項:post

  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標識的消息隊列

相關文章
相關標籤/搜索