歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RedHat AS4內核調優之kernel.sem的設置

RedHat AS4內核調優之kernel.sem的設置

日期:2017/2/28 16:02:39   编辑:Linux教程

semaphore概述

信號量
信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施, 它負責協調各個線程, 以保證它們能夠正確、合理的使用公共資源。
Semaphore分為單值和多值兩種,前者只能被一個線程獲得,後者可以被若干個線程獲得。
以一個停車場是運作為例。為了簡單起見,假設停車場只有三個車位,一開始三個車位都是空的。這時如果同時來了五輛車,看門人允許其中三輛不受阻礙的進入,然後放下車攔,剩下的車則必須在入口等待,此後來的車也都不得不在入口處等待。這時,有一輛車離開停車場,看門人得知後,打開車攔,放入一輛,如果又離開兩輛,則又可以放入兩輛,如此往復。
在這個停車場系統中,車位是公共資源,每輛車好比一個線程,看門人起的就是信號量的作用。
更進一步,信號量的特性如下:信號量是一個非負整數(車位數),所有通過它的線程(車輛)都會將該整數減一(通過它當然是為了使用資源),當該整數值為零時,所有試圖通過它的線程都將處於等待狀態。在信號量上我們定義兩種操作: Wait(等待) 和 Release(釋放)。 當一個線程調用Wait(等待)操作時,它要麼通過然後將信號量減一,要麼一直等下去,直到信號量大於一或超時。Release(釋放)實際上是在信號量上執行加操作,對應於車輛離開停車場,該操作之所以叫做“釋放”是因為加操作實際上是釋放了由信號量守護的資源。

在安裝Oracle 之前通常需要設置kernel.sem這個參數,下面對些作簡單介紹
kernel.sem相關配置

查看kernel.sem大小

sem其實是semaphores的縮寫,查看當前設置
#cat /proc/sys/kernel/sem

250 32000 100 128

或者

#sysctl -a|grep kernel.sem
error: permission denied on key 'kernel.cad_pid'
kernel.sem = 250 32000 32 128

或者

# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

參數含義

上面的4個數據分別對應:SEMMSL、SEMMNS、SEMOPM、SEMMNI這四個核心參數,具體含義和配置如下。

SEMMSL :用於控制每個信號集的最大信號數量。
Oracle 建議將 SEMMSL 設置為 init.ora 文件(用於 Linux 系統中的所有數據庫)中的最大 PROCESS 實例參數的設置值再加上 10 。此外, Oracle 建議將 SEMMSL 的值設置為不少於 100 。
SEMMNS:用於控制整個 Linux 系統中信號(而不是信號集)的最大數。
Oracle 建議將 SEMMNS 設置為:系統中每個數據庫的 PROCESSES 實例參數設置值的總和,加上最大 PROCESSES 值的兩倍,最後根據系統中 Oracle 數據庫的數量,每個加 10 。
使用以下計算式來確定在 Linux 系統中可以分配的信號的最大數量。它將是以下兩者中較小的一個值:SEMMNS 或 (SEMMSL * SEMMNI)

SEMOPM: 內核參數用於控制每個 semop 系統調用可以執行的信號操作的數量。semop 系統調用(函數)提供了利用一個 semop 系統調用完成多項信號操作的功能。一個信號集能夠擁有每個信號集中最大數量的SEMMSL 信號,因此建議設置 SEMOPM 等於SEMMSL 。
Oracle 建議將 SEMOPM 的值設置為不少於 100 。

SEMMNI :內核參數用於控制整個 Linux 系統中信號集的最大數量。Oracle 建議將 SEMMNI 的值設置為不少於 100 。
更改當前SEMAPHORES參數設置
[oracle@ebsse oracle]$ su
Password:
[root@ebsse oracle]# echo "5010 641280 5010 128" > /proc/sys/kernel/sem
[root@ebsse oracle]# cat /proc/sys/kernel/sem
5010 641280 5010 128
如需啟動時自動應用,可在/etc/sysctl.conf增加:
kernel.sem =5010 641280 5010 128

Copyright © Linux教程網 All Rights Reserved