共享記憶體相關(ipcs/ipcrm)
在Linux程式通訊中,共享記憶體的應用是比較普遍,把自己學習過的資料作一個小結吧!
共享記憶體是系統出於多個程式之間通訊的考慮,而預留的的一塊記憶體區。在/proc/sys/kernel/目錄下,記錄著共享記憶體的一些限制,如一個共享記憶體區的最大位元組數shmmax,系統範圍內最大共享記憶體區識別符號數shmmni等,可以手工對其調整,但不推薦這樣做。
注意:在使用共享記憶體,結束程式退出後。如果你沒在程式中用shmctl()刪除共享記憶體的話,一定要在命令列下用ipcrm命令刪除這塊共享記憶體。你要是不管的話,它就一直在那兒放著了。
簡單解釋一下ipcs命令和ipcrm命令。
取得ipc資訊:
ipcs [-m|-q|-s]
-m 輸出有關共享記憶體(shared memory)的資訊
-q 輸出有關資訊佇列(message queue)的資訊
-s 輸出有關“遮斷器”(semaphore)的資訊
%ipcs -m
刪除ipc
ipcrm -m|-q|-s shm_id
%ipcrm -m 105
---------------------------------
共享記憶體是一種非常重要且常用的程式間通訊方式,相對於其它IPC機制,因其速度最快、效率最高,被廣泛應用於各類軟體產品及應用開發中。System V IPC 為UNIX平臺上的共享記憶體應用制定了統一的API標準,從而為在UNIX/Linux平臺上進行跨平臺開發提供了極大的便利;開發人員基於一套基本相同的原始碼,便可開發出同時支援AIX、Solaris、HP-UX、Linux等平臺的產品。
$ ipcs -ma
IPC status from /dev/mem as of Thu Jul 17 08:48:39 BEIST 2014
T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME
Shared Memory:
m 0 0x5800120c --rw-rw-rw- root system root system 1 134217728 19838 32766 14:08:54 14:08:54 14:08:54
m 131073 0x16fd87e8 --rw-r----- oracle dba oracle dba 9 218415104 49796 64370 8:48:29 8:48:29 14:10:02
m 131074 0x78054448 --rw-r----- oracle dba oracle dba 6 106184704 46206 82892 1:40:19 1:40:19 14:09:54
m 131075 0xffffffff --rw-rw---- root system root system 1 4096 43874 43874 8:48:22 8:48:22 14:09:52
m 4 0x6953e7d8 --rw-r----- oracle dba oracle dba 9 303316992 54184 64436 1:37:49 1:37:49 14:10:08
m 5 0x47f35784 --rw-r----- oracle dba oracle dba 9 504643584 59096 78314 1:35:18 1:35:18 14:10:22
m 6 0xffffffff --rw------- root system root system 0 268435456 62182 62182 14:10:31 9:01:06 14:10:31
m 262151 0xffffffff --rw------- root system root system 1 268435456 79010 79010 9:01:47 no-entry 9:01:47
m 8 0x0d0004da --rw-rw-rw- root system root system 1 1440 45784 62354 8:45:31 8:45:31 14:34:43
$
ipcrm:manually deallocate shared memory on a system
ipcs [-m|-q|-s]
-m 輸出有關共享記憶體(shared memory)的資訊
-q 輸出有關資訊佇列(message queue)的資訊
-s 輸出有關“遮斷器”(semaphore)的資訊
IPC status from
T ID KEY MODE OWNER GROUP
Shared Memory:
m 0 0x50000d43 --rw-r--r-- root root
m 501 0x1e90c97c --rw-r----- oracle dba
刪除ipc(清除共享記憶體資訊)
ipcrm -m|-q|-s shm_id
do
ipcrm -m $i
ipcrm -s $i
done
ps -ef|egrep "ora_|asm_"|grep -v grep |grep -v crs|awk '{print $2}' |xargs kill -9
取得ipc資訊:
ipcs [-m|-q|-s]
-m 輸出有關共享記憶體(shared memory)的資訊
-q 輸出有關資訊佇列(message queue)的資訊
-s 輸出有關“遮斷器”(semaphore)的資訊
# ipcs -m
IPC status from
T ID KEY MODE OWNER GROUP
Shared Memory:
m 0 0x50000d43 --rw-r--r-- root root
m 501 0x1e90c97c --rw-r----- oracle dba
#ipcs |grep oracle|awk '{print $2}
刪除ipc(清除共享記憶體資訊)
ipcrm -m|-q|-s shm_id
%ipcrm -m 501
do
ipcrm -m $i
ipcrm -s $i
done
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1220947/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20190104]ipcs檢視共享記憶體段.txt記憶體
- [20191220]關於共享記憶體段相關問題.txt記憶體
- [20191223]關於共享記憶體段相關問題3.txt記憶體
- 記憶體優化相關記憶體優化
- windows memeory 記憶體相關術語Windows記憶體
- golang的記憶體相關內容Golang記憶體
- Golang 共享記憶體Golang記憶體
- POSIX 共享記憶體記憶體
- [Linux]共享記憶體Linux記憶體
- iOS 記憶體管理相關面試題iOS記憶體面試題
- Qt共享記憶體QSharedMemoryQT記憶體
- Linux共享記憶體(二)Linux記憶體
- nginx共享記憶體分析Nginx記憶體
- QT之共享記憶體QT記憶體
- 惡意軟體開發——記憶體相關API記憶體API
- Win10系統GPU共享記憶體怎麼關閉?Win10系統GPU共享記憶體的關閉方法Win10GPU記憶體
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- Linux共享記憶體的管理Linux記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- Android匿名共享記憶體(Ashmem)原理Android記憶體
- nginx中共享記憶體的使用Nginx記憶體
- 【Java 虛擬機器筆記】記憶體分配策略相關整理Java虛擬機筆記記憶體
- 與作用域相關的閉包、記憶體洩漏、this記憶體
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- Kubernetes中Pod間共享記憶體方案記憶體
- 程序間通訊(3)-共享記憶體記憶體
- 程式間通訊之共享記憶體記憶體
- Linux:深入淺出 Linux 共享記憶體Linux記憶體
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- Golang併發之共享記憶體變數Golang記憶體變數
- system-v IPC共享記憶體通訊記憶體
- Linux程式間通訊之共享記憶體Linux記憶體
- PostgreSQL共享記憶體裡的內容(initCommunication)SQL記憶體
- [20241021]使用gdb檢視修改記憶體地址以及相關值.txt記憶體
- linux mmap應用與驅動共享記憶體Linux記憶體
- C++ 共享記憶體ShellCode跨程式傳輸C++記憶體
- PHP 的自帶記憶體共享 APCu 和 shmPHP記憶體
- 資料庫實現原理#6(共享記憶體)資料庫記憶體