概述:
安裝Oracle時需要調整linux的核心引數,以前在做專案的時候都是把指令碼複製一下,時間長了都陌生了,今天整理整理,再回顧一下。
一般我在專案中設定的參考值:
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
各引數詳解:
kernel.shmmax:
是核心引數中最重要的引數之一,用於定義單個共享記憶體段的最大值。設定應該足夠大,能在一個共享記憶體段下容納下整個的SGA ,設定的過低可能會導致需要建立多個共享記憶體段,這樣可能導致系統性能的下降。至於導致系統下降的主要原因為在例項啟動以及ServerProcess建立的時候,多個小的共享記憶體段可能會導致當時輕微的系統性能的降低(在啟動的時候需要去建立多個虛擬地址段,在程序建立的時候要讓程序對多個段進行“識別”,會有一些影響),但是其他時候都不會有影響。
官方建議值:
32位linux系統:可取最大值為4GB(4294967296bytes)-1byte,即4294967295。建議值為多於記憶體的一半,所以如果是32為系統,一般可取值為4294967295。32位系統對SGA大小有限制,所以SGA肯定可以包含在單個共享記憶體段中。
64位linux系統:可取的最大值為物理記憶體值-1byte,建議值為多於物理記憶體的一半,一般取值大於SGA_MAX_SIZE即可,可以取物理記憶體-1byte。例如,如果為12GB物理記憶體,可取12*1024*1024*1024-1=12884901887,SGA肯定會包含在單個共享記憶體段中。
kernel.shmall:
該引數控制可以使用的共享記憶體的總頁數。Linux共享記憶體頁大小為4KB,共享記憶體段的大小都是共享記憶體頁大小的整數倍。一個共享記憶體段的最大大小是16G,那麼需要共享記憶體頁數是16GB/4KB=16777216KB /4KB=4194304(頁),也就是64Bit系統下16GB物理記憶體,設定kernel.shmall = 4194304才符合要求(幾乎是原來設定2097152的兩倍)。這時可以將shmmax引數調整到16G了,同時可以修改SGA_MAX_SIZE和SGA_TARGET為12G(您想設定的SGA最大大小,當然也可以是2G~14G等,還要協調PGA引數及OS等其他記憶體使用,不能設定太滿,比如16G)
kernel.shmmni:
該引數是共享記憶體段的最大數量。shmmni預設值4096。
fs.file-max:
該引數決定了系統中所允許的檔案控制代碼最大數目,檔案控制代碼設定代表linux系統中可以開啟的檔案的數量。
fs.aio-max-nr:
此引數限制併發未完成的請求,應該設定避免I/O子系統故障。
kernel.sem:
以kernel.sem = 250 32000 100 128為例:
250是引數semmsl的值,表示一個訊號量集合中能夠包含的訊號量最大數目。
32000是引數semmns的值,表示系統內可允許的訊號量最大數目。
100是引數semopm的值,表示單個semopm()呼叫在一個訊號量集合上可以執行的運算元量。
128是引數semmni的值,表示系統訊號量集合總數。
net.ipv4.ip_local_port_range:
表示應用程式可使用的IPv4埠範圍。
net.core.rmem_default:
表示套接字接收緩衝區大小的預設值。
net.core.rmem_max:
表示套接字接收緩衝區大小的最大值。
net.core.wmem_default:
表示套接字傳送緩衝區大小的預設值。
net.core.wmem_max:
表示套接字傳送緩衝區大小的最大值。