SGA與共享記憶體段(OS核心引數shmmax)

2021-06-20 18:32:48 字數 4039 閱讀 4178

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...