出现ORA-16191错误的原因都有哪些?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出现ORA-16191错误的原因都有哪些?相关的知识,希望对你有一定的参考价值。
参考技术A 创建DG后,主库无法传日志文件到备库,TRACE文件内容如下:*** 2013-03-27 19:32:24.367OCISessionBegin failed. Error -1.. Detailed OCI error val is 1031 and errmsg is 'ORA-01031: insufficient privileges'OCISessionBegin failed. Error -1.. Detailed OCI error val is 1031 and errmsg is 'ORA-01031: insufficient privileges'OCI_DBVER attribute value retrieval failed error=1017*** 2013-03-27 19:32:24.717 4320 krsh.cError 1017 received logging on to the standby
------------------------------------------------------------Check that the primary and standby are using a password fileand remote_login_passwordfile is set to SHARED or EXCLUSIVE,and that the SYS password is same in the password files.returning error ORA-16191
------------------------------------------------------------*** 2013-03-27 19:32:24.717 915 krsu.cError 16191 connecting to destination LOG_ARCHIVE_DEST_2 standby host 'STBY'Error 16191 attaching to destination LOG_ARCHIVE_DEST_2 standby host 'STBY'*** 2013-03-27 19:32:24.717 4320 krsh.cPING[ARC2]: Heartbeat failed to connect to standby 'STBY'. Error is 16191.*** 2013-03-27 19:32:24.717 2932 krsi.ckrsi_dst_fail: dest:2 err:16191 force:0 blast:1
那一般有哪些原因导致这个ORA-16191错误呢
场景应用:Java 出现 Out Of MemoryError(OOM 错误)的原因有哪些?出现 OOM 错误后,怎么解决?
文章目录
OutOf MemoryError 这种错误可以细分为多种不同的错误,每种错误都有
自身的原因和解决办法,如下所示:
超出堆最大空间
java.lang.OutOfMemoryError: Java heap space
错误原因:此 OOM 是由于 JVM 中 heap 的最大值不满足需要。
解决方法:
- 调高 heap 的最大值,即-Xmx 的值调大。
- 如果你的程序存在内存泄漏,一味的增加 heap 空间也只是推迟该错误出现的时间而已,所以要检查程序是否存在内存泄漏,比如:
- 尽早释放无用对象的引用。
- 避免在循环中创建对象。
- 使用字符串处理时避免使用String,应使用StringBuffer。
- 尽量少使用静态变量,因为静态变量存放在永久代,基本不参与垃圾回收。
在 GC 时对象过多
java.lang.OutOfMemoryError: GC overhead limit exceeded
错误原因:此 OOM 是由于 JVM 在 GC 时,对象过多,导致内存溢出,建议调整 GC 的策略,在一定比例下开始 GC 而不要使用默认的策略,或者将新代和老代设置合适的大小,需要进行微调存活率。
解决方法:改变 GC 策略,在老代 80%时就是开始 GC,并且将-XX:SurvivorRatio(-XX:SurvivorRatio=8)
和-XX:NewRatio(-XX:NewRatio=4)
设置的更合理。
perm 的最大值不满足需要
java.lang.OutOfMemoryError: Java perm space
错误原因:此 OOM 是由于 JVM 中 perm 的最大值不满足需要。
解决方法:调高 heap 的最大值,即-XX:MaxPermSize
的值调大。
另外,注意一点,Perm 一般是在 JVM 启动时加载类进来,如果是 JVM 运行较长一段时间而不是刚启动后溢出的话,很有可能是由于运行时有类被动态加载进来,此时建议用 CMS 策略中的类卸载配置。如:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
。
操作系统可分配内存不足
java.lang.OutOfMemoryError: unable to create new native thread
错误原因:当 JVM 向 OS 请求创建一个新线程时,而 OS 却由于内存不足无法创建新的 native 线程。
解决方法:如果 JVM 内存调的过大或者可利用率小于 20%,可以建议将 heap 及 perm 的最大值下调,并将线程栈调小,即-Xss 调小,如:-Xss128k。
JVM分配内存大于堆大小
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
错误原因:此类信息表明应用程序(或者被应用程序调用的 APIs)试图分配一个大于堆大小的数组。例如,如果应用程序 new 一个数组对象,大小为512M,但是最大堆大小为 256M,因此 OutOfMemoryError 会抛出,因为数组的大小超过虚拟机的限制。
解决方法:
- 首先检查 heap 的-Xmx 是不是设置的过小。
- 如果 heap的-Xmx 已经足够大,那么请检查应用程序是不是存在 bug,例如:应用程序可能在计算数组的大小时,存在算法错误,导致数组的 size 很大,从而导致巨大的数组被分配。
native 堆中分配内存失败,并且堆内存可能接近耗尽
java.lang.OutOfMemoryError: request <size> bytes for <reason>. Out of swap space
错误原因:抛出这类错误,是由于从 native 堆中分配内存失败,并且堆内存可能接近耗尽。这类错误可能跟应用程序没有关系,例如下面两种原因也会导致错误的发生:1) 操作系统配置了较小的交换区。2)系统的另外一个进程正在消耗所有的内存。
解决办法:
- 检查 os 的 swap 是不是没有设置或者设置的过小。
- 检查是否有其他进程在消耗大量的内存,从而导致当前的 JVM 内存不够分配。
注意:虽然有时<reason>
部分显示导致 OOM 的原因,但大多数情况下,<reason>
显示的是提示分配失败的源模块的名称,所以有必要查看日志文件,如 crash 时的 hs 文件。
以上是关于出现ORA-16191错误的原因都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章
场景应用:Java 出现 Out Of MemoryError(OOM 错误)的原因有哪些?出现 OOM 错误后,怎么解决?