首页 > Linux操作系统 > Linux操作系统 > 合肥ORA-27102(原创)
最近和内存结下了梁子,合肥xx项目,新装的系统,采用32G的大内存,64bit的操作系统,64位的oracle,为了充分利用它的物理内存,我们将SGA设置为18G,尽量将业务交易在内存中进行,减少IO。你懂的
安装完oracle之后数据库却起不来,错误如下:
SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
这个一看就明了了,肯定是oracle在nomount读取参数文件,划分内存区域的时候out of memory,物理内存是足够的,那究竟是什么影响内存划分呢。很自然的想到了操作系统是否做了内存限制。
查看
# sysctl -p
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
kernel.shmall = 6553600 --可以使用的共享内存的总量
kernel.shmmax = 17179869184 --最大共享内存段大小。
kernel.shmmni = 4096 -- 整个系统共享内存段的最大数目
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
$ getconf PAGE_SIZE
4096
oracle要求kernel.shmall 参数至少等于SGA大小,公式我总结为:
kernel.shmall *AGE_SIZE >=SGA (注意两边的单位一致)
发现这个配置是没问题的
那么会不会是linux做了用户进程限制呢,使用ulimit命令:
oracle@ahdxismpdb-1:~> ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256700
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) 33002480
file locks (-x) unlimited
将其改成:
#ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 8192
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 73728
virtual memory (kbytes, -v) unlimited
问题解决,perfect
总结:随着64bitoracle的推广,oracle只能使用1.7G内存的限制被打破,大内存成了主流,DB配置升级之后不能忘记了操作系统的相应调整
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25801738/viewspace-702736/ ,如需转载,请注明出处,否则将追究法律责任。