温馨提示×

Oracle在Linux上的资源限制与调整方法

小樊
40
2026-01-07 00:57:24
栏目: 云计算

Oracle在Linux上的资源限制与调整方法

一 用户级资源限制与生效机制

  • 关键限制项与建议值(针对oracle用户):
    • nofile(打开文件数):soft 1024,hard 65536
    • nproc(进程/线程数):soft 2047,hard 16384
    • 说明:soft为告警阈值,hard为上限;普通用户只能把soft调至不超过hard,且不能自行提高hard。上述为Oracle安装常见基线,可按并发与负载适当上调。
  • 配置步骤与生效要点:
    1. 编辑**/etc/security/limits.conf**
      oracle soft nproc 2047
      oracle hard nproc 16384
      oracle soft nofile 1024
      oracle hard nofile 65536
      
    2. 确保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
    3. 登录会话应用:重新登录oracle用户后,ulimit -a应反映新限制;当前会话内可用ulimit -n 65536 -u 16384临时提升(受hard约束)。
    4. 容器/系统d服务:若Oracle运行在systemd服务或容器中,需在对应单元(如oracle.service)中配置LimitNOFILE=65536LimitNPROC=16384等,PAM对该会话不生效。

二 内核参数与共享内存配置

  • 常见基线(写入**/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放入单个共享内存段可减少性能隐患;过低会导致创建多个段并带来启动/运行期额外开销。

三 内存管理与大页配置

  • 内存管理方式与参数要点:
    • 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**容量≥目标内存;否则实例启动会失败。
  • 大页HugePages(提升大内存与SGA访问效率,减少页表开销):
    • 计算HugePages数量(示例SGA=12G,HugePage大小通常为2MB):12288MB / 2MB = 6144,预留少量余量可设6200左右。
    • 配置步骤:
      1. /etc/sysctl.conf:vm.nr_hugepages=6200
      2. 重启或按需使参数生效
      3. 启动数据库前确认:grep Huge /proc/meminfoipcs -m查看共享内存段是否使用大页
    • 注意:启用HugePages后,通常不再使用AMM(二者策略互斥)。

四 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 -pcat /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位于单个共享内存段,减少段数量。

0