{"id":3032,"date":"2019-12-03T19:01:54","date_gmt":"2019-12-03T19:01:54","guid":{"rendered":"https:\/\/nenadnoveljic.com\/blog\/?p=3032"},"modified":"2020-08-21T12:19:30","modified_gmt":"2020-08-21T12:19:30","slug":"troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/","title":{"rendered":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database"},"content":{"rendered":"<h1>java.lang.OutOfMemoryError<\/h1>\n<p>Oracle database JVM imposes some undocumented hard-coded limits leading to <i>java.lang.OutOfMemoryError<\/i>. In this blog post, I&#8217;m going to provide general guidelines on how to analyze such exceptions with OS tools when a higher-level information is missing. I used DTrace, but you can easily obtain the same information with, for example, gdb or any tool for tracing the application function calls.<\/p>\n<p>One way to provoke <i>java.lang.OutOfMemoryError<\/i> is by allocating a large array (let me know if you have other test cases, please). But let&#8217;s first try to reproduce it within a conventional, i.e., non-database JVM.<\/p>\n<h1>Conventional JVM<\/h1>\n<p>The following class allocates an array of integers, whose size is specified as the command line argument:<\/p>\n<pre><code>public class Demo {\n  public static void defineIntArray( int p_size) throws Exception {\n    int[] v = new int[p_size];\n  }\n  public static void main( String args[] ) throws Exception {\n    System.out.println(args[0]);\n    defineIntArray(Integer.parseInt(args[0]));\n  }\n}<\/code><\/pre>\n<p>The execution will break for 500 million elements, because the default maximum Java heap size is simply too low:<\/p>\n<pre><code>java Demo 500000000 \n500000000\nException in thread \"main\" java.lang.OutOfMemoryError: Java heap space\n        at Demo.defineIntArray(Demo.java:3)\n        at Demo.main(Demo.java:7)<\/code><\/pre>\n<p>Given that each integer takes four bytes, we can easily estimate the total required memory. After specifying a sufficiently large maximum Java heap size, the program indeed completes without errors:<\/p>\n<pre><code>java -Xmx2g Demo 500000000 \n500000000<\/code><\/pre>\n<p>This experiment confirmed that in a conventional JVM <i>java.lang.OutOfMemoryError<\/i> really means what it says, that is, not enough memory for completing the operation. Consequently, the problem can be remedied by simply assigning more memory to JVM.<\/p>\n<h1>Database JVM<\/h1>\n<p>Now, let&#8217;s create the same Java code in an Oracle database (19c, in this case):<\/p>\n<pre><code>create or replace and compile java source named  \"Demo\" as\npublic class Demo {\t\n  public static void defineIntArray( int p_size) throws Exception {\n    int[] v = new int[p_size];\n  }\n};\n\/\n\nCREATE OR REPLACE procedure p_define_int_array (p_size number) \n  as LANGUAGE JAVA NAME 'Demo.defineIntArray(int)' ;\n\/<\/code><\/pre>\n<p>The maximum array size &#8211; irrespective of the available memory &#8211; is 134217723 (0x\u202d7FFFFFB\u202c). Adding just one additional element will cause <i>OutOfMemoryError<\/i>:<\/p>\n<pre><code>exec p_define_int_array(134217724);\nBEGIN p_define_int_array(134217724); END;\n\n*\nERROR at line 1:\nORA-29532: Java call terminated by uncaught Java exception:\njava.lang.OutOfMemoryError\nORA-06512: at \"SYS.P_DEFINE_INT_ARRAY\", line 1\nORA-06512: at line 1<\/code><\/pre>\n<p>Unlike in a conventional JVM, this problem can&#8217;t be solved by adding more memory. For example, PGA limit wasn&#8217;t set at all, and there was plenty of memory on both server and in the java pool. Also, the absence of common memory shortage errors (ORA-04030, ORA-04031 and ORA-04036) suggests that the lack of memory isn&#8217;t a problem. In other words, this limit is hard-coded and, therefore, cannot be avoided by resizing the memory parameters. That&#8217;s a serious disadvantage. On top of that, the error message doesn&#8217;t specify which (undocumented) limit was reached. The only clue is the bare error message <i>java.lang.OutOfMemoryError<\/i>. But, luckily, that error message is also written into the server process trace file. Why is that beneficial? Because we can capture the call stack which writes the error message, and after doing so, get an idea which Oracle C functions participate in the error processing:<\/p>\n<pre><code>dtrace -p 12473 -x ustackframes=100 -s <a href=\"https:\/\/nenadnoveljic.com\/blog\/enriching-trace-with-call-stacks\/\">call_stack_trace.d<\/a> '\"java.lang.OutOfMemoryError\"'\n\nException in thread \"Root Thread\" java.lang.OutOfMemoryError\n\nlibc.so.1`__write+0xa\na.out`sdbgrfuwf_write_file+0x3d\na.out`sdbgrfwf_write_file+0x3c\na.out`dbgtfdFileWrite+0x20d\na.out`dbgtfdFileAccessCbk+0x19f\na.out`dbgtfPutStr+0x2d7\na.out`dbktPri+0x95\na.out`ksdwrf+0x1bc\na.out`ksdout+0xa9\na.out`jox_out_to_trc+0xce\na.out`jox_out+0xa5e\na.out`ioc_ewrite+0x25\na.out`iocbf_ewrite+0x1c\na.out`ioc_do_call+0x13a\na.out`joet_switched_env_callback+0x276\na.out`ioct_ewrite+0x2a\na.out`jonfos_write_bytes+0x29a\na.out`jonfos8_write_bytes__cst__+0x2e2\na.out`jonfos8_write_bytes+0x6b\n<span style=\"color:red\">0x7fffbc7540df\n0x7fffbc753f80\n0x7fffbc753cf8\n0x7fffbc70d2ec\n0x7fffbc7132ea\n0x7fffbc7128c4\n0x7fffbc58a3d5\n0x7fffbc3dced7<\/span>\na.out`sjoninvk_jit+0x411\na.out`joevm_invoke_jit_0ret+0x18a\na.out`joevm_invokenonvirtual_setup_and_go+0x577\na.out`joevm_invokenonvirtual+0x2ec\na.out`joe_run_vm+0x2948\na.out`joe_run+0x81e\na.out`joez_jit_trampoline+0x1e1b\na.out`joe_jit_void_trampoline+0x17\na.out`sjoe_jit_void_callback+0x1a7\n<span style=\"color:red\">0x7fffbc71f50c<\/span>\na.out`sjoninvk_jit+0x411\na.out`joevm_invoke_jit_0ret+0x18a\na.out`joevm_invokevirtual_setup_and_go+0x600\na.out`joevm_invokevirtualq_first+0xa5\na.out`joevm_invokevirtual+0x827\na.out`joe_run_vm+0x4d04\na.out`joe_run+0x81e\na.out`joet_aux_thread_main+0x1254\na.out`seoa_note_stack_outside+0x1d\na.out`joet_thread_main+0x43\na.out`sjontlo_initialize+0x94\na.out`joe_enter_vm+0x7ef\na.out`ioei_call_java+0x38ca\na.out`ioesub_CALL_JAVA+0x2e5\na.out`seoa_note_stack_outside+0x1d\na.out`ioe_call_java+0x15d\na.out`jox_invoke_java_+0x3e2\na.out`kkxmjexe+0x63d\na.out`kgmexcb+0x3a\na.out`kkxmswu+0x47\na.out`kgmexwi+0x56c\na.out`kgmexec+0x54f\na.out`pefjavacal+0x5dd\na.out`pefcal+0x37d\na.out`pevm_FCAL+0xe4\na.out`pfrinstr_FCAL+0xb9\noracle`pfrrun_no_tool+0x3c\noracle`pfrrun+0x53a\noracle`plsql_run+0x2c0\n...<\/code><\/pre>\n<h1>Just-in-time compiler<\/h1>\n<p>As you can see, the stack above also contains some private memory addresses. These memory locations contain precompiled java code stored in <i>\/tmp<\/i> and mapped by the process <a href=\"https:\/\/blog.tanelpoder.com\/2014\/05\/09\/what-the-heck-are-the-devshmjoxshm_ext_x-files-on-linux\/\">[1]<\/a>. This code was produced by the just-in-time (JIT) compiler, which is the default way to execute Java code in the database <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/JAVA_JIT_ENABLED.html#GUID-B4EDA651-0872-4292-8A9B-8838003CD29E\">[2]<\/a>:<\/p>\n<pre><code>show parameter jit\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\njava_jit_enabled                     boolean     TRUE<\/code><\/pre>\n<p>The precompiled code performs better, but on the downside, it&#8217;s extremely difficult to analyze the problem without having function names on the stack.<\/p>\n<h1>Interpreted Java<\/h1>\n<p>Therefore, I temporarily switched off the JIT compiler, reproduced the error once again, and, finally, captured the stack. The following stack with interpreted Java code is far more descriptive:<\/p>\n<pre><code>alter session set java_jit_enabled=false ;\n\ndtrace -p 12473 -x ustackframes=100 -s <a href=\"https:\/\/nenadnoveljic.com\/blog\/enriching-trace-with-call-stacks\/\">call_stack_trace.d<\/a> '\"java.lang.OutOfMemoryError\"'\n\nException in thread \"Root Thread\" java.lang.OutOfMemoryError\n\nlibc.so.1`__write+0xa\na.out`sdbgrfuwf_write_file+0x3d\na.out`sdbgrfwf_write_file+0x3c\na.out`dbgtfdFileWrite+0x20d\na.out`dbgtfdFileAccessCbk+0x19f\na.out`dbgtfPutStr+0x2d7\na.out`dbktPri+0x95\na.out`ksdwrf+0x1bc\na.out`ksdout+0xa9\na.out`jox_out_to_trc+0xce\na.out`jox_out+0xa5e\na.out`ioc_ewrite+0x25\na.out`iocbf_ewrite+0x1c\na.out`ioc_do_call+0x13a\na.out`<span style=\"color:red\">joe<\/span>t_switched_env_callback+0x276\na.out`ioct_ewrite+0x2a\na.out`jonfos_write_bytes+0x29a\na.out`jonfos9_write_bytes+0x21\na.out`<span style=\"color:red\">joe<\/span>vm_invoke_sysnative+0x20f\na.out`<span style=\"color:red\">joe<\/span>vm_invokenonvirtual_setup_and_go+0x577\na.out`<span style=\"color:red\">joe<\/span>vm_invokenonvirtual+0x2ec\na.out`<span style=\"color:red\">joe<\/span>_run_vm+0x2948\na.out`<span style=\"color:red\">joe<\/span>_run+0x81e\na.out`<span style=\"color:red\">joe<\/span>t_aux_thread_main+0x1254\na.out`seoa_note_stack_outside+0x1d\na.out`<span style=\"color:red\">joe<\/span>t_thread_main+0x43\na.out`sjontlo_initialize+0x94\na.out`<span style=\"color:red\">joe<\/span>_enter_vm+0x7ef\na.out`ioei_call_java+0x38ca\na.out`ioesub_CALL_JAVA+0x2e5\na.out`seoa_note_stack_outside+0x1d\na.out`ioe_call_java+0x15d\na.out`jox_invoke_java_+0x3e2\na.out`kkxmjexe+0x63d\na.out`kgmexcb+0x3a\na.out`kkxmswu+0x47\na.out`kgmexwi+0x56c\na.out`kgmexec+0x54f\na.out`pefjavacal+0x5dd\na.out`pefcal+0x37d\na.out`pevm_FCAL+0xe4\na.out`pfrinstr_FCAL+0xb9\noracle`pfrrun_no_tool+0x3c\noracle`pfrrun+0x53a\noracle`plsql_run+0x2c0\n...<\/code><\/pre>\n<p>It&#8217;s worth noting, that many functions begin with <span style=\"color:red\">joe<\/span> (which possibly stands for [J]ava [O]racle runtime [e]nvironment or something similar). Therefore, tracing all <span style=\"color:red\">joe*<\/span> functions during the good and bad execution should provide further clues:<\/p>\n<pre><code>#!\/usr\/sbin\/dtrace -s\n\n#pragma D option flowindent\n#pragma D option dynvarsize=8m\n\npid$target:oracle:<span style=\"color:red\">joe*<\/span>:entry{}\npid$target:oracle:<span style=\"color:red\">joe*<\/span>:return{}<\/code><\/pre>\n<p>Good execution:<\/p>\n<pre><code>      -&gt; joe_invoke\n        -&gt; joe_run\n          -&gt; joe_run_vm\n            -&gt; joevm_invokerecursive\n              -&gt; joevm_first_time_setup\n              &lt;- joevm_first_time_setup\n              -&gt; joevm_invoke_interp_1loc\n              &lt;- joevm_invoke_interp_1loc\n            &lt;- joevm_invokerecursive\n            -&gt; joe_make_primitive_array\n              -&gt; joet_switched_env_callback\n              &lt;- joet_switched_env_callback\n              -&gt; joet_switched_env_callback\n              &lt;- joet_switched_env_callback\n              -&gt; joet_switched_env_callback\n              &lt;- joet_switched_env_callback\n&lt;- joe_make_primitive_array\n-&gt; joe_return<\/code><\/pre>\n<p>Bad execution:<\/p>\n<pre><code>-&gt; joe_invoke\n  -&gt; joe_run\n    -&gt; joe_run_vm     \n      -&gt; joevm_invokerecursive\n        -&gt; joevm_first_time_setup\n        &lt;- joevm_first_time_setup\n        -&gt; joevm_invoke_interp_1loc\n        &lt;- joevm_invoke_interp_1loc\n      &lt;- joevm_invokerecursive\n      -&gt; joe_make_primitive_array\n        -&gt; <span style=\"color:red\">joe_really_blow_it_internal<\/span>\n          -&gt; joe_well_known\n          &lt;- joe_well_known\n          -&gt; joe_blow_status_internal\n            -&gt; joet_exf_stack_top\n            &lt;- joet_exf_stack_top\n          &lt;- joe_blow_status_internal<\/code><\/pre>\n<p>The key difference between two executions is the call to <span style=\"color:red\">joe_really_blow_it_internal<\/span>, which sounds like a bad comedy name, but is actually the Oracle C function for processing Java unhandled exceptions.<\/p>\n<h1>Exception handling<\/h1>\n<p>Now, we can capture the full stack in <span style=\"color:red\">joe_really_blow_it_internal<\/span> execution:<\/p>\n<pre><code>dtrace -n 'pid$target:oracle:<span style=\"color:red\">joe_really_blow_it_internal<\/span>:entry { ustack() } -p 12473\n\noracle`<span style=\"color:red\">joe_really_blow_it_internal<\/span>\noracle`<span style=\"color:red\">joe_make_primitive_array<\/span>+0x204\noracle`joe_run_vm+0x397d\noracle`joe_run+0x81e\noracle`joe_invoke+0x7e3\noracle`joet_aux_thread_main+0x17b9\na.out`seoa_note_stack_outside+0x1d\noracle`joet_thread_main+0x43\noracle`sjontlo_initialize+0x94\noracle`joe_enter_vm+0x7ef\noracle`ioei_call_java+0x38ca\na.out`ioesub_CALL_JAVA+0x2e5\na.out`seoa_note_stack_outside+0x1d\na.out`ioe_call_java+0x15d\na.out`jox_invoke_java_+0x3e2\na.out`kkxmjexe+0x63d\na.out`kgmexcb+0x3a\na.out`kkxmswu+0x47\na.out`kgmexwi+0x56c\na.out`kgmexec+0x54f<\/code><\/pre>\n<p>In this case, we can see that the exception was raised by <span style=\"color:red\">joe_make_primitive_array<\/span>, which we can map to the array definition in our Java code.<\/p>\n<h1>Primitive arrays<\/h1>\n<p>From here on, the analysis is case-specific. In our example, we need to focus on <span style=\"color:red\">joe_make_primitive_array<\/span> and try to identify the application Java code and conditions that lead to the error.<\/p>\n<p>The array size is passed by the rdx CPU register (that is, the 3rd argument) and, thus, can be traced with the following DTrace script:<\/p>\n<pre><code>#pragma D option quiet\npid$target:oracle:<span style=\"color:red\">joe_make_primitive_array<\/span>:entry {\n  printf(\"%s array size: %d\\n\", probefunc, arg2);\n}<\/code><\/pre>\n<pre><code>dtrace -s make_primitive_array.d -p 12473\n<span style=\"color:red\">joe_make_primitive_array<\/span> array size: 134217724<\/code><\/pre>\n<p>By trying out to allocate the arrays of different sizes we can deduce the limit. Then, we can record the allocation sizes with the script above to identify the particular call that caused <i>java.lang.OutOfMemoryError<\/i>.<\/p>\n<h1>General guidelines<\/h1>\n<p>Finally, we can derive the general process for analyzing opaque JVM exceptions in the database:<br \/>\n1. switch off JIT compiler to obtain descriptive call stack<br \/>\n2. collect the stack for <i>joe_really_blow_it_internal<\/i><br \/>\n3. analyse the <i>joe_really_blow_it_internal<\/i> caller<\/p>\n<h1>Summary<\/h1>\n<p>Unlike in conventional JVMs, <i>java.lang.OutOfMemoryError<\/i>, surprisingly, doesn&#8217;t mean a memory shortage in the database JVM. The error message rather indicates that some hard-coded limitation is exceeded. Unfortunately, there aren&#8217;t any further clues about what limit exactly was reached, which makes the analysis difficult. A possibile way to go about it is to capture the call stack when the exception is thrown. The caller has to be analyzed further until we can map it to the application Java code.<\/p>\n<h1>Update December 6, 2019 &#8211; data types<\/h1>\n<p>The maximum number of elements in array depends on the data type. However, what&#8217;s always the same is the maximum total size in bytes: 536870895. In other words, the larger the data type, the less elements the array can store. By the way, this limit is the same accross different releases (tested with 12.1, 18.5 and 19.5).<\/p>\n<p>While that&#8217;s usually sufficient, it might be the problem when handling large BLOBs (in fact, that was exactly the use case which prompted this research). A 3rd party application uses database Java to spool a BLOB in the file, and, before doing so, allocates the buffer of the size of the BLOB:<\/p>\n<pre><code>byte[] buffer = new byte[bufferSize];<\/code><\/pre>\n<p>Therefore, <i>OutOfMemoryError<\/i> will be thrown if the BLOB is larger than the hard-coded limit.<\/p>\n<h1>References<\/h1>\n<p><a href=\"https:\/\/blog.tanelpoder.com\/2014\/05\/09\/what-the-heck-are-the-devshmjoxshm_ext_x-files-on-linux\/\">[1]<\/a> Tanel Poder, <i>What the heck are the \/dev\/shm\/JOXSHM_EXT_x files on Linux?<\/i> May 9, 2014<br \/>\n<a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/JAVA_JIT_ENABLED.html#GUID-B4EDA651-0872-4292-8A9B-8838003CD29E\">[2]<\/a> Oracle Corp., <i>Database Reference<\/i> February, 2019<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Internal processing of critical Java errors in the Oracle database  <a href=\"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[24,31,5,35],"tags":[],"class_list":["post-3032","post","type-post","status-publish","format-standard","hentry","category-dtrace","category-java","category-oracle","category-pga"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"Internal processing of critical Java errors in the Oracle database\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"Internal processing of critical Java errors in the Oracle database\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-03T19:01:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-21T12:19:30+00:00\" \/>\n<meta name=\"author\" content=\"Nenad Noveljic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NenadNoveljic\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nenad Noveljic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database\",\"datePublished\":\"2019-12-03T19:01:54+00:00\",\"dateModified\":\"2020-08-21T12:19:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/\"},\"wordCount\":1009,\"commentCount\":0,\"articleSection\":[\"DTrace\",\"Java\",\"Oracle\",\"PGA\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/\",\"name\":\"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"datePublished\":\"2019-12-03T19:01:54+00:00\",\"dateModified\":\"2020-08-21T12:19:30+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"Internal processing of critical Java errors in the Oracle database\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\",\"name\":\"All-round Database Topics\",\"description\":\"Nenad Noveljic\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\",\"name\":\"Nenad Noveljic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"caption\":\"Nenad Noveljic\"},\"sameAs\":[\"nenad-noveljic-9b746a6\",\"https:\\\/\\\/x.com\\\/NenadNoveljic\"],\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/author\\\/nenad\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics","description":"Internal processing of critical Java errors in the Oracle database","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/","og_locale":"en_US","og_type":"article","og_title":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics","og_description":"Internal processing of critical Java errors in the Oracle database","og_url":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/","og_site_name":"All-round Database Topics","article_published_time":"2019-12-03T19:01:54+00:00","article_modified_time":"2020-08-21T12:19:30+00:00","author":"Nenad Noveljic","twitter_card":"summary_large_image","twitter_creator":"@NenadNoveljic","twitter_misc":{"Written by":"Nenad Noveljic","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database","datePublished":"2019-12-03T19:01:54+00:00","dateModified":"2020-08-21T12:19:30+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/"},"wordCount":1009,"commentCount":0,"articleSection":["DTrace","Java","Oracle","PGA"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/","url":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/","name":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"datePublished":"2019-12-03T19:01:54+00:00","dateModified":"2020-08-21T12:19:30+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"Internal processing of critical Java errors in the Oracle database","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/troubleshooting-java-lang-outofmemoryerror-in-the-oracle-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Troubleshooting java.lang.OutOfMemoryError in the Oracle Database"}]},{"@type":"WebSite","@id":"https:\/\/nenadnoveljic.com\/blog\/#website","url":"https:\/\/nenadnoveljic.com\/blog\/","name":"All-round Database Topics","description":"Nenad Noveljic","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nenadnoveljic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa","name":"Nenad Noveljic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","caption":"Nenad Noveljic"},"sameAs":["nenad-noveljic-9b746a6","https:\/\/x.com\/NenadNoveljic"],"url":"https:\/\/nenadnoveljic.com\/blog\/author\/nenad\/"}]}},"_links":{"self":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/comments?post=3032"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3032\/revisions"}],"predecessor-version":[{"id":3053,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3032\/revisions\/3053"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=3032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=3032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=3032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}