1. Linux核心參數
#vi /etc/sysctl.conf
--------------------------------
cat >>/etc/sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
EOF
--------------------------------
# /sbin/sysctl -p
使修改的參數生效。
2. kernel.shmmax
含義:共享內存段最大值(以字節爲單位)。
設置:kernel.shmmax>=sag_max_size 不小於物理內存的一半,應該足夠大。
查看:cat /proc/sys/kernel/shmmax
ipcs –lm
引用:
shmmax設置應該足夠大,能在一個共享內存段下容納下整個的SGA ,設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降。
SHMMAX僅僅是在共享內存段被創建的時候用來比較的一個數字,當共享內存段被一個進程(Process)創建,操作系統檢查是否被要求的共享內存段的值大於 shmmax 的值,如果是,那麼將會拋出一個錯誤。這個時候系統會創建另外的一個或多個共享內存段滿足進程的需求。一般來說,共享內存段個數和系統性能沒有太直接的關係,也不會對性能產生太大的影響。
Steve Adams 在他的小冊子中說過,在實例啓動以及Server Process 創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低(在啓動的時候需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響,但是其他時候都不會有影響。這意味着如果你的程序不是經常 CreateProcesses(以及Destroy Them),性能方面就不是考慮的問題。
Oracle 安裝文檔建議 32BitLinux 系統設置shmmax 爲32Bit 最大的限制值(setting shmmax to the 32-bit number limit),也就是4G 。
所以一般來說,1-4G 的物理內存,可以直接設置shmmax爲最大物理內存即可,那麼SGA 肯定在一個共享內存段中,32Bit Linux 系統物理內存大於4G 的設置爲4G 即可 。
總之,一般設置shmmax >=SGA(32Bit 系統是否支持到1.7G 以上SGA 需要注意) ,缺省爲32M,
如果是64Bit 的Linux 操作系統,shmmax 設置爲大於SGA_MAX_SIZE即可。
3. kernel.shmall
含義:控制共享內存頁數(以頁爲單位)。
設置:kernel.shmall > = kernel.shmmax / page_size ORACLE DOC 默認值:2097152*4096=8GB
控制共享內存頁數(shmall) = 最大共享內存段的大小(shmmax) / 共享內存頁的大小(4KB)
查看:cat /proc/sys/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)。
其值應不小於shmmax/page_size.缺省值就是2097152,如果服務器上運行的所有實例的SGA總和不超過8GB(通常系統可分配的共享內存的和最大值爲8GB),通常不需要修改。
4. kernel.shmmni
含義:設置系統範圍內共享內存段的最大數量。 PS:注意這個參數不是shmmin是shmmni; shmmin 表示內存段最小大小。
設置:shmmni 缺省值4096
查看:cat /proc/sys/kernel/shmmni
5. fs.file-max
含義:一個進程可以打開的文件句柄的最大數量。
設置:fs.file-max=65536
查看:cat /etc/sysctl.conf |grep 'fs.file-max'
6. net.ipv4.ip_local_port_range
含義:專用服務器模式下與用戶進程通信時分配給用戶的端口區間。
設置:net.ipv4.ip_local_port_range = 1024 65000
查看:cat /etc/sysctl.conf |grep 'net.ipv4.ip_local'
7. net.core.rmem_default
含義:默認接收緩衝區大小。
設置:net.core.rmem_default=262144
查看:cat /etc/sysctl.conf
8. net.core.rmem_max
含義:接收緩衝區最大值。
設置:net.core.rmem_max=262144
查看:cat /etc/sysctl.conf
9. net.core.wmem_default
含義:默認的發送緩衝區大小。
設置:net.core.wmem_default=262144
查看:cat /etc/sysctl.conf
10. net.core.wmem_max
含義:發送緩衝區最大值。
查看:net.core.wmem_max=262144
設置:cat /etc/sysctl.conf
11. kernel.sem 信號量
含義:
查看:cat /proc/sys/kernel/sem ipcs -ls
1>.semmsl
含義:每個信號量set中信號量最大個數
設置:最小250;對於processes參數設置較大的系統建議設置爲processes+10
2>.semmns
含義:linux系統中信號量最大個數
設置:至少32000;SEMMSL * SEMMNI
3>.semopm
含義:semop系統調用允許的信號量最大個數
設置:至少100;或者等於SEMMSL
4>.semmni
含義:linux系統信號量set最大個數
設置:最少128