在solaris10上安裝ORACLE 12c時遇到:Soft limit:maxmum open file descriptors錯誤,filedescriptors
--配置oracle最大開啟檔案數限制
Solaris作業系統具有開啟檔案數量的限制,資料庫的db_files參數設定會受作業系統的參數限制。
在solaris10安裝12c的過程中出現這樣的一個環境檢查錯誤:
Soft Limit: maximum open file descriptors - This is a prerequisite condition to test whether the soft limit for "maximum open file descriptors" is set correctly.
Expected Value : 1024
Actual Value : 256
--查看參數限制:
bash-3.2# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 28565
virtual memory (kbytes, -v) unlimited
bash-3.2#
##建議使用第三種方法:
(1)修改/etc/system參數
在Solaris10上,這種方法已經不建議使用,但這種方式仍然有效。/etc/system中設定參數是全域有效,即所有使用者均會受影響。並且設定後,需要重啟系統才會生效。
設定方法是在/etc/system檔案中增加以下兩個參數,然後重啟系統。
set rlim_fd_cur=1024
set rlim_fd_max=65535
(2)使用ulimit命令修改(立即生效,一旦當前SHELL退出設定即失效)
ulimit命令只能修改當前SHELL及其子進程的設定,設定後立即生效,'一旦當前SHELL退出設定即失效。-S參數用於設定軟式節流,-H參數用於設定硬限制'。
ulimit -S -n 65536
ulimit -H -n 65536
--ulimit命令中open files顯示的是軟式節流,可以用prctl命令顯示硬限制,即privileged值。
bash-3.2# prctl -i process $$
process: 13110: bash
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
process.max-address-space
privileged 16.0EB max deny -
system 16.0EB max deny -
process.max-file-descriptor
basic 256 - deny 13110
privileged 65.5K - deny -
system 2.15G max deny -
process.max-core-size
privileged 8.00EB max deny -
system 8.00EB max deny -
process.max-stack-size
basic 10.0MB - deny 13110
privileged 125TB max deny -
system 125TB max deny -
....
...
...
(3)使用project(立即生效,永久)
project是Solaris10新增加的特性,可以通過設定project參數為一個使用者或一組使用者佈建參數值。設定後可立即生效。
'但是,root使用者的結果只受/etc/system裡參數的影響,而不受project user.oracle影響,root使用者不屬於此project. '
以下是設定樣本:
bash-3.2# :/ #>projadd user.oracle (建立project user.oracle)
bash-3.2# :/ #>id -p oracle
uid=100(oracle) gid=1(other) projid=100(user.oracle) (oracle使用者屬於project user.oracle)
bash-3.2# :/ #>projmod -a -K "process.max-file-descriptor=(basic,65534,deny)" user.oracle
bash-3.2# :/ #>projmod -a -K "process.max-file-descriptor=(priv,65535,deny)" user.oracle
bash-3.2# :/ #>grep 'user.oracle' /etc/project
user.oracle:100::::process.max-file-descriptor=(basic,65534,deny),(priv,65535,deny)
設定basic和privilege值分別為65534和65535,不能越過/etc/system中的最大硬限制65535;
bash-3.2# :/ #>tail -2 /etc/system
set rlim_fd_cur=1024
set rlim_fd_max=65535
bash-3.2# plimit $$
13110: bash
resource current maximum
time(seconds) unlimited unlimited
file(blocks) unlimited unlimited
data(kbytes) unlimited unlimited
stack(kbytes) 10240 unlimited
coredump(blocks) unlimited unlimited
nofiles(descriptors) 256 65536
vmemory(kbytes) unlimited unlimited
bash-3.2#
root使用者的結果只受/etc/system裡參數的影響,而不受project user.oracle影響,root使用者不屬於此project.
bash-3.2# su - oracle
Oracle Corporation SunOS 5.10 Generic Patch January 2005
-sh: TEMP=/tmp: is not an identifier
$ bash
bash-3.2$ plimit $$
14704: bash
resource current maximum
time(seconds) unlimited unlimited
file(blocks) unlimited unlimited
data(kbytes) unlimited unlimited
stack(kbytes) 10240 unlimited
coredump(blocks) unlimited unlimited
nofiles(descriptors) 65534 65535
vmemory(kbytes) unlimited unlimited
bash-3.2$
其他資源限制的添加如下:
--同樣如上進行需要修改其他參數:
noexec_user_stack=1
semsys:seminfo_semmni=100
semsys:seminfo_semmns=1024
semsys:seminfo_semmsl=256
semsys:seminfo_semvmx=32767
shmsys:shminfo_shmmax=4294967295
shmsys:shminfo_shmmni=100
rlim_fd_max=65536
rlim_fd_cur=4096
maxuprc=16384
max_nprocs=3000
projmod -a -K "project.max-sem-ids=(priv,100,deny)" user.oracle
projmod -a -K "process.max-sem-nsems=(priv,256,deny)" user.oracle
projmod -a -K "project.max-shm-memory=(priv,4294967295,deny)" user.oracle
projmod -a -K "project.max-shm-ids=(priv,100,deny)" user.oracle