linux共享内存变量 tiaojianbianliang,修改linux共享内存大小
這是實際linux系統顯示的實際數據:
beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmax
33554432
beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmni
4096
beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmax
8192
beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmni
622
beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmnb
16384
System V?IPC?參數
名字
描述
合理取值
SHMMAX
最大共享內存段尺寸(字節)
最少若干兆(見文本)
SHMMIN
最小共享內存段尺寸(字節)
1
SHMALL
可用共享內存的總數量(字節或者頁面)
如果是字節,就和?SHMMAX?一樣;如果是頁面,ceil(SHMMAX/PAGE_SIZE)
SHMSEG
每進程最大共享內存段數量
只需要 1 個段,不過缺省比這高得多。
SHMMNI
系統范圍最大共享內存段數量
類似?SHMSEG?加上用于其他應用的空間
SEMMNI
信號燈標識符的最小數量(也就是說,套)
至少ceil(max_connections / 16)
SEMMNS
系統范圍的最大信號燈數量
ceil(max_connections / 16) * 17?加上用于其他應用的空間
SEMMSL
每套信號燈最小信號燈數量
至少 17
SEMMAP
信號燈映射里的記錄數量
參閱文本
SEMVMX
信號燈的最大值
至少 1000 (缺省通常是32767,除非被迫,否則不要修改)
最重要的共享內存參數是?SHMMAX?, 以字節記的共享內存段可擁有的最大尺寸。如果你收到來自shmget?的類似Invalid argument?這樣的錯誤信息,那么很有可能是你超過限制了。
有些系統對系統里面共享內存的總數(SHMALL?)還有限制。 請注意這個數值必須足夠大。(注意:SHMALL?在很多系統上是用頁面數,而不是字節數來計算的。)
系統里的最大信號燈數目是由SEMMNS?設置的,因此這個值應該至少和?max_connections?設置一樣大,并且每十六個聯接還要另外加一個。? 參數SEMMNI?決定系統里一次可以存在的信號燈集的數目。 因此這個參數至少應該為?ceil(max_connections % 16)?。降低允許的聯接數目是一個臨時的繞開失敗的方法,這個啟動失敗通常被來自函數semget?的錯誤響應?No space left on device?搞得很讓人迷惑。
有時候還可能有必要增大SEMMAP?,使之至少按照?SEMMNS?配置。這個參數定義信號燈資源映射的尺寸,可用的每個連續的信號燈塊在這個映射中存放一條記錄。每當一套信號燈被釋放,那么它要么會加入到該映射中一條相連的已釋放的塊的入口中,要么注冊成一條新的入口。如果映射填滿了碎片,那么被釋放的信號燈就丟失了(除非重起)。因此時間長信號燈空間的碎片了會導致可用的信號燈比應該有的信號燈少。
SEMMSL?參數,決定一套信號燈里可以有多少信號燈,
更改方法
Linux
缺省設置只適合小安裝(缺省最大共享內存是 32 MB)。不過,其它的缺省值都相當大,通常不需要改變。最大的共享內存段設置可以用?sysctl?接口設置。 比如,要允許 128 MB,并且最大的總共享內存數為 2097152 頁(缺省):
$
sysctl -w kernel.shmmax=134217728
$
sysctl -w kernel.shmall=2097152
你可以把這些設置放到?/etc/sysctl.conf?里,在重啟后保持有效。
老版本里可能沒有?sysctl?程序,但是同樣的改變可以通過操作?/proc?文件系統來做:
$
echo 134217728 >/proc/sys/kernel/shmmax
$
echo 2097152 >/proc/sys/kernel/shmall
另外可行的方法:
修改方法如下:
修改/etc/rc.d/rc.local文件。
在文件的前面注釋的后面加入以下行:
#修改內核共享內存大小;
echo134217728>/proc/sys/kernel/shmmax;
#說明:這里的值為內存的一半;
#如果系統內存是256M,則值為134217728;
#如果系統內存是512M,則值為268435456;
修改完成以后,重起機器就搞定。
其它系統的修改方法
MacOS X
在 OS X 10.2 以及更造版本里, 編輯文件?/System/Library/StartupItems/SystemTuning/SystemTuning?并且用下列命令修改這些數值:
sysctl -w kern.sysv.shmmax
sysctl -w kern.sysv.shmmin
sysctl -w kern.sysv.shmmni
sysctl -w kern.sysv.shmseg
sysctl -w kern.sysv.shmall
在 OS X 10.3 及以后的版本里,這些命令移動到?/etc/rc?里面去了,必須在那里編輯。你需要重新啟動才能讓設置生效。請注意/etc/rc?通常會被 OS X 更新覆蓋 (比如 10.3.6 到 10.3.7),所以每次更新后你可能都需要重新編輯。
在這個平臺上,SHMALL?是用 4KB 頁來度量的。 還要注意有些版本的 OS X 將拒絕把?SHMMAX?的數值數值為非 4096 的倍數。
SCO OpenServer
缺省配置時,只允許每段 512KB 共享內存。 要增大設置,首先進入?/etc/conf/cf.d?目 錄。要顯示當前的以字節記的?SHMMAX?,運行
./configure -y SHMMAX
設置?SHMMAX?的新值:
./configure SHMMAX=value
這里?value?是你想設置的以字節記的新值。設置完了以后SHMMAX?重新制作內核
./link_unix
然后重起。
AIX
至少對于版本 5.1 而言,我們有必要為類似?SHMMAX?這樣的參數做特殊的配置,因為這個參數可以配置為所有內容都當作共享內存使用。這就是類似?DB/2?這樣的數據庫常用的配置。
不過,我們可能有必要在?/etc/security/limits?里面修改全局?ulimit?ulimit?信息,因為文件大小的缺省硬限制(fsize?)以及文件數(nofiles?)可能太低了。
Solaris
至少到版本 2.6 為止,共享內存段的缺省最大設置對?PostgreSQL?來說是太低了。相關的設置可以在/etc/system?里面修改,例如:
set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32
你要重起系統令修改生效。
又見?http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html?獲取關于?Solaris?里面的共享內存的信息。
UnixWare
在?UnixWare?7 上,缺省配置里的最大共享內存段是 512 kB。 要顯示SHMMAX?的當前值,運行
/etc/conf/bin/idtune -g SHMMAX
就會顯示以字節記的當前的缺省的最小和最大值。 要給SHMMAX?設 置一個新值,運行:
/etc/conf/bin/idtune SHMMAX value
這里?value?是你想設置的以字節記的新值。設置完SHMMAX?后,重建內核
/etc/conf/bin/idbuild -B
然后重起。
BSD/OS
共享內存.缺省時是只支持 4 MB 的共享內存。請記住共享內存是不能分頁的;它是鎖在 RAM 里面的。要增加你的系統支持的共享緩沖區數目,向你的內核配置文件里增加下面的行:
options "SHMALL=8192"
options "SHMMAX=\(SHMALL*PAGE_SIZE\)"
SHMALL?以 4KB 頁為單位計算,所以 1024 頁面代表 4 M 共享內存。 所以上面的東西把共享內存區域增加到 32 MB。 對于運行 4.3 或者更新版本的人,你可能需要增大?KERNEL_VIRTUAL_MB?,超過缺省的?248?。 做完上面的修改之后,然后編譯內核并重起。
對于運行 4.0 或者更早的版本的, 請用?bpatch?找出當前內核的?sysptsize?值。它是啟動的時候動態計算的。
$ bpatch -r sysptsize
0x9 = 9
然后,把?SYSPTSIZE?修改為在內核配置文件里的一個硬代碼值。用?bpatch?算出來的值,并且為你需要的每個額外的 4 MB 共享內存再加 1。
options "SYSPTSIZE=16"
sysptsize?不能用?sysctl?修改。
信號燈.你可能還需要增加信號燈的數量;系統缺省的總數 60 只能允許大概 50 個?PostgreSQL?連接。在內核配置文件里設置你需要的值,比如:
options "SEMMNI=40"
options "SEMMNS=240"
FreeBSD
缺省設置只適合于很小的安裝(比如,缺省?SHMMAX?是 32 MB)。我們可以用?sysctl?或者?loader?接口來修改。下面的參數可以用?sysctl?設置:
$
sysctl -w kern.ipc.shmall=32768
$
sysctl -w kern.ipc.shmmax=134217728
$
sysctl -w kern.ipc.semmap=256
要想讓這些設置重啟后有效,修改?/etc/sysctl.conf?。
如果用?sysctl?,那么剩下的信號燈設置是只讀的,但是信號燈可以在啟動的時候,在?loader?提示符下設置:
(loader)
set kern.ipc.semmni=256
(loader)
set kern.ipc.semmns=512
(loader)
set kern.ipc.semmnu=256
類似的,這些東西可以在?/boot/loader.conf?中保存,以便重啟之后依然有效。
你可能還想配置內核,讓把共享內存裝載到 RAM 里,避免他們被交換到交換分區中。這些可以通過使用?sysctl?設置kern.ipc.shm_use_phys?來實現。
在 4.0 之前的?FreeBSD?版本類似?NetBSD?和?OpenBSD?(見下文)。
NetBSD
OpenBSD
編譯內核時需要把選項?SYSVSHM?和?SYSVSEM?打開。(缺省是打開的。)共享內存的最大尺寸是由選項SHMMAXPGS?(以頁計)。下面顯示了一個如何設置這些參數的例子(OpenBSD?使用的是?option?):
options SYSVSHM
options SHMMAXPGS=4096
options SHMSEG=256
options SYSVSEM
options SEMMNI=256
options SEMMNS=512
options SEMMNU=256
options SEMMAP=256
你可能原意使用?sysctl?設置將共享內存鎖在 RAM 中以避免它們被交換出去,我們可以用?sysctl?設置kern.ipc.shm_use_phys?來實現這個目的。
HP-UX
缺省設置看來對普通安裝是足夠的了。 在?HP-UX?10,SEMMNS?的出廠缺省是 128,可能對大的數據庫節點來說太小了。
IPC?可以在?System Administration Manager(系統管理器)?(SAM?)下面的?Kernel Configuration?->Configurable Parameters?配置。你配置完了以后敲?Create A New Kernel?選項。
總結
以上是生活随笔為你收集整理的linux共享内存变量 tiaojianbianliang,修改linux共享内存大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下编译build的命令,【li
- 下一篇: linux libvpx编译安装,lin