Oracle Study之 IPCS管理共享記憶體

2021-06-29 11:46:17 字數 4162 閱讀 5245

oracle study之--ipcs管理共享記憶體

unix/linux下的共享記憶體、訊號量、佇列資訊管理

在unix/linux下,經常有因為共享記憶體、訊號量,佇列等共享資訊沒有乾淨地清除而引起一些問題。

檢視共享資訊的記憶體的命令是:ipcs [-m|-s|-q]。

缺省會列出共享記憶體、訊號量,佇列資訊

-m列出共享記憶體

-s列出共享訊號量

-q列出共享佇列

清除命令是:ipcrm [-m|-s|-q] id。

-m刪除共享記憶體

-s刪除共享訊號量

-q刪除共享佇列

案例分析:

[oracle@trade_as02 ~]$ ipcs -a

------ shared memory segments --------

key        shmid      owner      perms      bytes      nattch     status     

0x30024289 32768      futures   777        528384     1                       

0xca2fd414 491521     oracle    640        1730150400 16                   

------ semaphore arrays --------

key        semid      owner      perms      nsems     

0x00028009 0          futures   666        1         

0x0002800c 32769      futures   666        1         

0x30024003 262146     futures   777        3         

0x3002428a 294915     futures   777        2         

0x3002428b 327684     futures   777        2         

0x3002428c 360453     futures   777        2         

0x3002428d 393222     futures   777        2         

0x3002428e 425991     futures   777        2         

0x52dff7d0 3964936    oracle    640        151       

0x52dff7d1 3997705    oracle    640        151       

0x52dff7d2 4030474    oracle    640        151       

0x52dff7d3 4063243    oracle    640        151       

0x52dff7d4 4096012    oracle    640        151       

------ message queues --------

key        msqid      owner      perms      used-bytes   messages

共享記憶體段有時不能馬上刪除,需使用這個記憶體段的所有程序向os傳送detach命令時才有釋放,此時可以考慮刪除程序使用的訊號量,幫助釋放共享記憶體段

相關知識:訊號量、資源釋放、ipcs、ipcrm

訊號量又稱為訊號燈,它是用來協調不同程序間的資料物件的,而最主要的應用是共享記憶體方式的程序間通訊。本質上,訊號量是乙個計數器,它用來記錄對某個資源(如共享記憶體)的訪問狀況;共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。在linux系統下常用的方式是通過shm***函式族來實現利用共享記憶體進行儲存的。如shmget,類似於 malloc函式

ipcs可用來顯示當前linux系統中的共享記憶體段、訊號量集、訊息佇列等的使用情況。

命令示例:

ipcs -a或ipc 顯示當前系統中共享記憶體段、訊號量集、訊息佇列的使用情況;

ipcs -m 顯示共享記憶體段的使用情況;

ipcs -s 顯示訊號量集的使用情況;

ipcs -q 顯示訊息佇列的使用情況;

ipcrm可用來刪除對應的共享記憶體段、訊號量、訊息佇列;

命令示例:

ipcrm -s semid 刪除對應的訊號量集

ipcrm -m shmid 刪除對應的共享記憶體段

ipcrm -q msqid 刪除對應的訊息佇列

ipcrm本身只能實現單個資源的刪除,利用以下命令可實現批量刪除:

1.ipcs -s|grep 使用者名稱|cut -d" " -f2|xargs -n1 ipcrm -s

2.ipcs -s|awk '/使用者名稱/'|xargs -n1 ipcrm -s

3.ipcs -s|awk '/使用者名稱/'

4.for i in echo `ipcs|grep 使用者名稱|cut -d" " -f2`; do ipcrm -s $i; done

更深入的了解:

oracle 記憶體段引數設定:

本文出自 「天涯客的blog」 部落格,請務必保留此出處

IPC之共享記憶體

標頭檔案 sys shm.h ipcs m 檢視共享記憶體狀況 1 共享記憶體的建立 shmget 函式 同一段記憶體被不同程序共享 但是共享記憶體並不提供同步機制 需要訊號量等加以輔助 int shmget key t key,size t size,int shm key ipc private...

IPC之訊息佇列

訊息佇列缺點 1.如果程序建立了乙個訊息佇列,在該佇列中放入了幾則訊息,然後終止,但是該訊息佇列及其內容並不會被刪除。直到出現一下情況 某個程序呼叫msgrcv或 msgctl讀訊息或刪除訊息佇列,某個程序執行ipcrm 1 命令刪除訊息佇列,或由正在啟動的系統刪除訊息佇列。2.訊息佇列有大小限制,...

IPC之訊息佇列

可閱讀mq overview查閱更多資訊 man 7 mq overview.posix的訊息佇列實現更好,但systemv的訊息佇列更廣泛應用 舊的api posix的訊息佇列有兩種呼叫方式 庫函式和系統呼叫。訊息佇列是乙個訊息的鏈結列表,訊息都儲存在核心中,程序通過一種和共享記憶體使用的識別符號...