首页 > Linux操作系统 > Linux操作系统 > ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device
| 参数名字 | 含义 | 设置 |
| 设置共享内存 | 共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信(IPC)方式 主要是因为数据在进程之间传递时没有涉及到内核的操作。在进程之间不需要复制数据。 Oracle 将共享内存用于它的系统全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程所共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径以及更多。 要确定所有共享内存的限制,可使用以下命令: # ipcs -lm ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1 | |
| SHMMAX | SHMMAX 参数定义共享内存段的最大大小(以字节为单位)。 | Oracle SGA 由共享内存组成,且错误设置 SHMMAX 可能会限制 SGA 的大小。在设置 SHMMAX 时,切记 SGA 的大小应该适合于一个共享内存段。SHMMAX 设置不足可能会导致以下问题: ORA-27123:unable to attach to shared memory segment 您可以通过执行以下命令来确定 SHMMAX 的值: # cat /proc/sys/kernel/shmmax 33554432 SHMMAX 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下任一方法将 SHMMAX 参数设置为 2GB: * 通过直接更改 /proc 文件系统,你无需重新启动计算机便可以改变 SHMMAX 的缺省设置。可以使用以下方法动态设置SHMMAX 的值。通过将此命令置于 /etc/rc.local 启动文件中可以使它永久有效: # echo "2147483648" > /proc/sys/kernel/shmmax * 您还可以使用 sysctl 命令来更改 SHMMAX 的值: # sysctl -w kernel.shmmax=2147483648 * 最后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效: # echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf |
| SHMMNI | 我们现在看一下 SHMMNI 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的缺省值是4096。该值足以满足需要,因此通常无需更改。 | 可以通过执行以下命令来确定 SHMMNI 的值: # cat /proc/sys/kernel/shmmni 4096 |
| SHMALL | 该参数控制系统一次可以使用的共享内存总量(以页为单位) | 简言之,该参数的值始终应至少为: ceil(SHMMAX/PAGE_SIZE) SHMALL 的默认大小为 2097152,并可以使用以下命令进行查询: # cat /proc/sys/kernel/shmall 2097152 SHMALL 的默认设置足以满足 Oracle RAC 10g 安装的需要。 (注意:i386 平台上的 Red Hat Linux 中的页面大小为 4,096字节。但您可以使用 bigpages,它支持配置更大的内存页面大小。) |
| 设置信号 | 对信号的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。Unix System V 支持信号集,其中的每个信号都是一个信号计数。当应用程序请求信号时,它使用“集合”来完成此工作。 要确定所有信号限制,可使用以下命令: # 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 您还可以使用以下命令: # cat /proc/sys/kernel/sem 250 32000 32 128 | |
| SEMMSL | SEMMSL 内核参数用于控制每个信号集合的最大信号数。 | Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux系统上所有数据库)中的最大 PROCESS 实例参数设置再加上10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。 |
| SEMMNI | SEMMNI 内核参数用于控制整个 Linux 系统中信号集的最大数量。 | Oracle 建议将 SEMMNI 设置为不小于 100。 |
| SEMMNS | SEMMNS 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量 | Oracle 建议将 SEMMNS 设置为系统上每个数据库的PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。 使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值: SEMMNS — 或 — (SEMMSL * SEMMNI) 。 |
| SEMOPM | SEMOPM 内核参数用于控制每个 semop 系统调用可以执行的信号操作数。 | semop 系统调用(函数)能够使用一个 semop 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的SEMMSL,因此建议将 SEMOPM 设置为等于 SEMMSL。 Oracle 建议将 SEMOPM 设置为不小于 100。 |
| 设置信号内核参数 | 我想更改(增加)的唯一参数是 SEMOPM。所有其他的缺省设置可以完全满足我们的示例安装。 * 您可以通过直接更改 /proc 文件系统,不必重新启动机器而更改所有信号设置的缺省设置。该方法将以下内容置于 /etc/rc.local 启动文件中: # echo "250 32000 100 128" > /proc/sys/kernel/sem * 您还可以使用 sysctl 命令来更改所有信号设置的值: # sysctl -w kernel.sem="250 32000 100 128" * 最后,可以通过将内核参数插入到 /etc/sysctl.conf 启动文件中以使此更改永久有效: # echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf | |
| 设置文件句柄 | 配置 Red Hat Linux 服务器时,必须确保最大文件句柄数足够大。文件句柄的设置表示您在Linux 系统上可以打开的文件数。 使用以下命令来确定整个系统中文件句柄的最大数量: # cat /proc/sys/fs/file-max 32768 Oracle 建议将整个系统的文件句柄值至少设置为 65536。 * 通过直接更改 /proc 文件系统,您可以不必重新启动机器而改变文件句柄最大数量的默认设置。该方法将以下内容置于 /etc/rc.local 启动文件中: # echo "65536" > /proc/sys/fs/file-max * 您还可以使用 sysctl 命令来更改 SHMMAX 的值: # sysctl -w fs.file-max=65536 * 最后,可以通过将内核参数插入到 /etc/sysctl.conf 启动文件中以使此更改永久有效: # echo "fs.file-max=65536" >> /etc/sysctl.conf 可以通过使用以下命令查询文件句柄的当前使用情况: # cat /proc/sys/fs/file-nr 613 95 32768 file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。 (注意:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令来验证 ulimit 设置: # ulimit unlimited | |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22531473/viewspace-747915/ ,如需转载,请注明出处,否则将追究法律责任。