shmmax
os的核心引數,即單個共享記憶體段的最大值,若shmmax值shmmax的配置
solaris系統 /etc/system檔案
linux系統 /proc/sys/kernel/shmmax檔案
舉例檢視某共享記憶體段的記憶體位址和大小
方法一:
oracle@linux:~>ipcs -sa//檢視共享記憶體段數量,並找到shmid(共享記憶體id)
------ shared memory segments --------
key shmid owner perms bytes nattch status
0x000000002424832oracle 660 4096 0
0x00000000 2457601 oracle 660 4096 0
0x00000000 2490370 oracle 660 4096 0
0x00000000 2523139 oracle 660 4096 0
0xf03d9fe8 2555908 oracle 660 4096 0
------ semaphore arrays --------
key semid owner perms nsems
0x002fa327 0 root 666 2
0x9f2adfa8 2490369 oracle 660 152
0x9f2adfa9 2523138 oracle 660 152
0x9f2adfaa 2555907 oracle 660 152
------ message queues --------
key msqid owner perms used-bytes messages
oracle@linux:~>ps -ef|grep dbw
oracle 1143 13592 0 08:50 pts/0 00:00:00 grep dbw
oracle178351 0 feb19 ? 00:00:14 ora_dbw0_ora11g //查詢某程序的pid
oracle@linux:~> pmap17835| grep2424832
_060001000 16380k 264k 120k rwxs /dev/shm/ora_ora11g_2424832_0
61000000 16384k 0k 0k rwxs /dev/shm/ora_ora11g_2424832_1
62000000 16384k 5104k 5016k rwxs /dev/shm/ora_ora11g_2424832_2
start 程序起始位址
size 程序占用的位址空間
rss 保留記憶體的位元組數
dirty 髒頁的位元組數(共享和私有)
方法二:
oracle@linux:~> more /proc/17835/maps | grep2424832
60000000-60001000 r-xs 00000000 00:11 6635213 /dev/shm/ora_ora11g_2424832_0
60001000-61000000 rwxs 00001000 00:11 6635213 /dev/shm/ora_ora11g_2424832_0
61000000-62000000 rwxs 00000000 00:11 6635214 /dev/shm/ora_ora11g_2424832_1
62000000-63000000 rwxs 00000000 00:11 6635215 /dev/shm/ora_ora11g_2424832_2
其中第一列表示記憶體位址範圍
可以檢視oracle的幾個共享記憶體段的總體使用情況:
oracle@linux:~> ipcs -sa
------ shared memory segments --------
key shmid owner perms bytes nattch status
0x00000000 2424832 oracle 660 4096 0
0x00000000 2457601 oracle 660 4096 0
0x00000000 2490370 oracle 660 4096 0
0x00000000 2523139 oracle 660 4096 0
0xf03d9fe8 2555908 oracle 660 4096 0
------ semaphore arrays --------
key semid owner perms nsems
0x002fa327 0 root 666 2
0x9f2adfa8 2490369 oracle 660 152
0x9f2adfa9 2523138 oracle 660 152
0x9f2adfaa 2555907 oracle 660 152
------ message queues --------
key msqid owner perms used-bytes messages
oracle@linux:~> pmap 17804 | grep ora_ | awk '' | awk -f / '' | awk -f _ '' | uniq -c //統計出每個共享記憶體段使用次數
4 2424832
128 2457601
128 2490370
128 2523139
114 2555908
常見問題:
1、配置的sga過大超過物理記憶體,導致共享記憶體段無法分配,修正引數;
2、oracle異常關閉導致共享記憶體沒有釋放,ipcs命令先找到共享記憶體id,再ipcrm命令強制釋放
通訊與共享記憶體
如何理解 不要通過共享記憶體來通訊,而應該通過通訊來共享記憶體 使用共享記憶體的話在多執行緒的場景下為了處理競態,需要加鎖,使用起來比較麻煩。另外使用過多的鎖,容易使得程式的 邏輯堅澀難懂,並且容易使程式死鎖,死鎖了以後排查問題相當困難,特別是很多鎖同時存在的時候。共享記憶體會涉及到多個執行緒同時訪...
R語言快速實現並行處理與共享記憶體
用r程式設計時,我們可能會需要並行 parallel 處理乙個耗時很長的任務,有時又希望每個子任務都能訪問和修改同乙個變數,那這個變數就應放在共享記憶體 shared memory 中,下面我就簡單介紹怎樣快速實現 注 下面我講的並行處理方法適用於linux mac系統,不適用windows系統,當...
Linux共享記憶體之段錯誤
最近為了學習作業系統,練習寫乙個shell,然後其中採用了共享記憶體的方案。然而在共享記憶體初始化的時候移植了之前寫共享記憶體實驗已經成功的初始化 卻出現了段錯誤。主要 如下 include stupidshell.h int loop int shm id char shm buff cmdpoo...