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共享記憶體段有時不能馬上刪除,需使用這個記憶體段的所有程序向os傳送detach命令時才有釋放,此時可以考慮刪除程序使用的訊號量,幫助釋放共享記憶體段------ 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
相關知識:訊號量、資源釋放、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的訊息佇列有兩種呼叫方式 庫函式和系統呼叫。訊息佇列是乙個訊息的鏈結列表,訊息都儲存在核心中,程序通過一種和共享記憶體使用的識別符號...