Hi David , the values are already user-inspectable via jcmd vm.info , however this way is not very user friendly (and I am not sure how stable it is between updates / releases). Probably not as stable as an API .
Best regards, Matthias > -----Original Message----- > From: David Holmes <david.hol...@oracle.com> > Sent: Donnerstag, 20. September 2018 03:13 > To: Baesken, Matthias <matthias.baes...@sap.com>; 'hotspot- > d...@openjdk.java.net' <hotspot-...@openjdk.java.net>; serviceability- > d...@openjdk.java.net serviceability-dev@openjdk.java.net <serviceability- > d...@openjdk.java.net> > Subject: Re: OOM counters > > Hi Matthias, > > > Those counters, as I recall, were added to the hs_err report purely to > show if an application/test had been "playing too close to the edge" > before it crashed. They were never intended as user-inspectable values. > > I have no opinion as to whether they should be. > > David > > On 19/09/2018 7:12 PM, Baesken, Matthias wrote: > > Hello, Currently we have already counters in the Hotspot codebase > > counting Java heap, > > > > Metaspace and class metaspace related OOMs. > > > > See declarations: > > > > jdk/src/hotspot/share/utilities/exceptions.hpp > > > > 107 // Count out of memory errors that are interesting in error diagnosis > > > > 108 static volatile int _out_of_memory_error_java_heap_errors; > > > > 109 static volatile int _out_of_memory_error_metaspace_errors; > > > > 110 static volatile int _out_of_memory_error_class_metaspace_errors; > > > > output : > > > > jdk/src/hotspot/share/utilities/exceptions.cpp > > > > 460void Exceptions::print_exception_counts_on_error(outputStream* st) > { > > > > 461 print_oom_count(st, "java_heap_errors", > > _out_of_memory_error_java_heap_errors); > > > > 462 print_oom_count(st, "metaspace_errors", > > _out_of_memory_error_metaspace_errors); > > > > 463 print_oom_count(st, "class_metaspace_errors", > > _out_of_memory_error_class_metaspace_errors); > > > > 464 if (_stack_overflow_errors > 0) { > > > > 465 st->print_cr("StackOverflowErrors=%d", _stack_overflow_errors); > > > > 466 } > > > > 467 if (_linkage_errors > 0) { > > > > 468 st->print_cr("LinkageErrors=%d", _linkage_errors); > > > > 469 } > > > > 470} > > > > But currently the output is only done from vmError.cpp , in case of > > > > a) error reporting > > > > b) jcmd vm.info (in case exceptions happened, otherwise the section > > is not printed) > > > > (see void VMError::print_vm_info(outputStream* st) { ... } ) > > > > It would be interesting for us to get the values of the existing > > counters via JDK coding. > > > > In our proprietary JVM we had a similar mechanism. > > > > Is there anything planned for this (or even already something present) ? > > > > There exists already a class java/lang/management/MemoryMXBean.java > > with a management interface for the memory system of > > > > the Java virtual machine. It contains some "getter" - methods like > > > > public int getObjectPendingFinalizationCount(); > > > > public MemoryUsage getHeapMemoryUsage(); > > > > Do you think we could add a method (or methods) for accessing the > > existing OOM counters > > > > ( for example, public OomCounters getOutOfMemoryCounters(); ) ? > > > > Best regards, Matthias > >