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

Reply via email to