Oracle在Linux上的资源限制与调整方法
导读:Oracle在Linux上的资源限制与调整方法 一 用户级资源限制与生效机制 关键限制项与建议值(针对oracle用户): nofile(打开文件数):soft 1024,hard 65536 nproc(进程/线程数):soft 20...
Oracle在Linux上的资源限制与调整方法
一 用户级资源限制与生效机制
- 关键限制项与建议值(针对oracle用户):
- nofile(打开文件数):soft 1024,hard 65536
- nproc(进程/线程数):soft 2047,hard 16384
- 说明:soft为告警阈值,hard为上限;普通用户只能把soft调至不超过hard,且不能自行提高hard。上述为Oracle安装常见基线,可按并发与负载适当上调。
- 配置步骤与生效要点:
- 编辑**/etc/security/limits.conf**
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 - 确保PAM加载limits模块(不同发行版路径可能不同,二选一或同时配置)
- /etc/pam.d/login:
session required pam_limits.so - /etc/pam.d/sshd 或 /etc/pam.d/system-auth:
session required pam_limits.so
- /etc/pam.d/login:
- 登录会话应用:重新登录oracle用户后,
ulimit -a应反映新限制;当前会话内可用ulimit -n 65536 -u 16384临时提升(受hard约束)。 - 容器/系统d服务:若Oracle运行在systemd服务或容器中,需在对应单元(如oracle.service)中配置
LimitNOFILE=65536、LimitNPROC=16384等,PAM对该会话不生效。
- 编辑**/etc/security/limits.conf**
二 内核参数与共享内存配置
- 常见基线(写入**/etc/sysctl.conf**,执行
sysctl -p生效):fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 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_TARGET(或SGA_MAX_SIZE)。例如SGA为12G时,可设
kernel.shmmax=12884901887(即16GB-1)。 - kernel.shmall:系统可分配的共享内存总页数。页大小通常为4KB,计算式:
shmall = ceil(总共享内存需求 / 4KB)。例如需要16GB共享内存:16GB/4KB=4194304,则设kernel.shmall=4194304。 - 说明:将SGA放入单个共享内存段可减少性能隐患;过低会导致创建多个段并带来启动/运行期额外开销。
- kernel.shmmax:单个共享内存段最大值。建议≥SGA_TARGET(或SGA_MAX_SIZE)。例如SGA为12G时,可设
三 内存管理与大页配置
- 内存管理方式与参数要点:
- ASMM:设置
SGA_TARGET(动态)与SGA_MAX_SIZE(静态,需重启)。示例:alter system set sga_max_size=4096M scope=spfile; alter system set sga_target=4096M scope=spfile; shutdown immediate; startup; - PGA:建议
WORKAREA_SIZE_POLICY=AUTO,再设置PGA_AGGREGATE_TARGET(可在线调整)。示例:alter system set workarea_size_policy=auto scope=both; alter system set pga_aggregate_target=512M scope=both; - AMM:使用
MEMORY_TARGET/MEMORY_MAX_TARGET时,需确保**/dev/shm**容量≥目标内存;否则实例启动会失败。
- ASMM:设置
- 大页HugePages(提升大内存与SGA访问效率,减少页表开销):
- 计算HugePages数量(示例SGA=12G,HugePage大小通常为2MB):
12288MB / 2MB = 6144,预留少量余量可设6200左右。 - 配置步骤:
- /etc/sysctl.conf:
vm.nr_hugepages=6200 - 重启或按需使参数生效
- 启动数据库前确认:
grep Huge /proc/meminfo、ipcs -m查看共享内存段是否使用大页
- /etc/sysctl.conf:
- 注意:启用HugePages后,通常不再使用AMM(二者策略互斥)。
- 计算HugePages数量(示例SGA=12G,HugePage大小通常为2MB):
四 CPU与I/O资源隔离与调度
- CPU亲和性(将Oracle进程绑定到指定CPU):
- 使用
taskset启动实例或调整进程亲和性(示例绑定到CPU 1,3-5):taskset -c 1,3-5 sqlplus '/ as sysdba' startup # 调整已运行进程 taskset -pc 1-3 < pid> # 多线程需对线程逐一设置 for p in /proc/< pid> /task/*; do taskset -p -c 1-3 ${ p##*/} ; done
- 使用
- CGroup精细化控制(Oracle Linux 6 UEK2及以上):
- 可用子系统包括cpuset、cpu、cpuacct、memory、blkio等,可按组为Oracle分配CPU份额/配额、内存上限与I/O权重,实现多负载隔离与保障关键业务QoS。
五 验证与常见问题处理
- 快速验证清单:
- 用户限制:
su - oracle -c 'ulimit -a'(确认nofile/nproc) - 内核参数:
sysctl -p与cat /proc/sys/fs/file-max、/proc/sys/kernel/shmmax等 - 共享内存:
ipcs -m查看段大小与数量;df -h /dev/shm(AMM场景) - HugePages:
grep Huge /proc/meminfo - CPU亲和性:
taskset -p < pid>查看
- 用户限制:
- 常见问题与对策:
- 安装/启动报“too many open files”或“max user processes”:提升
nofile/nproc并确认PAM/服务单元已配置 - 实例启动失败且提示共享内存不足:提高
kernel.shmmax/kernel.shmall,或改用HugePages - AMM无法启动:检查**/dev/shm**是否足够大
- 性能抖动或启动慢:尽量让SGA位于单个共享内存段,减少段数量。
- 安装/启动报“too many open files”或“max user processes”:提升
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Oracle在Linux上的资源限制与调整方法
本文地址: https://pptw.com/jishu/789139.html
