--配置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