ORA-04030:out of process memory when trying to allocate string bytes
产生该错误的直接原因是oracle服务器无法从操作系统中分配内存(PGA、UGA)给新的连接
可能的原因是:
1)操作系统内存耗尽
2)os、db级别的内存使用限制
3)oracle内存分配的是否合理
1)白俄DB的物理内存为8G,交换分区为2G
观察得出物理内存的使用率都在99%以上;虚拟内存的使用率在40%到70%之间
虚拟内存的使用率偏高,可以通过填内存、优化应用的减少排序的方式,来降低使用率
2)内存分配限制
(1)查看操作系统内存限制:
MSKiptv2-scp-1:~ # 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
上面显示操作系统没有做内存限制
(2)内核参数:
白俄:
MSKiptv2-scp-1:~ # /sbin/sysctl -p
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
内核参数未作调整
在suse 64bit操作系统上安装64bit的oracle需要调整内核参数,现网没有做任何调整
需要将附件中文件分别上传到/etc/和/etc/security/下
#dos2unix /etc/sysctl.conf
#dos2unix /etc/security/limits.conf
#sysctl -p
#chkconfig boot.sysctl on
(3)oracle内存分配
1、SGA设置如下:
SQL> show parameters sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1600M
sga_target big integer 0
SGA设置为1600M,且未设置成自动管理(sga_target为0),需要将其设置成sga_max_size大小
2、PGA设置
PGA只有400m 这个值相对太小了,由于workarea_size_policy为auto,查看PGA历史上使用的峰值为:
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
maximum PGA allocated 7052241920 bytes
最高峰为6.5个G
SGA和PGA的设置不足是导致ORA-04030错误的原因之一,建议分别设置成4G、1G
另外需要查看十点到十二点的top SQL 优化代码,减少排序
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25801738/viewspace-702590/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25801738/viewspace-702590/
本文分析了ORA-04030错误产生的原因,并提供了具体的解决方案,包括调整SGA和PGA配置,优化应用程序减少排序操作等。
2574

被折叠的 条评论
为什么被折叠?



