RFR: 8226575: OperatingSystemMXBean should be made container aware
Mandy Chung
mandy.chung at oracle.com
Fri Jul 19 15:27:51 UTC 2019
On 7/18/19 3:49 PM, David Holmes wrote:
> Hi Andrew,
>
> Sorry - this whole discussion slipped past me while I was traveling in
> the US in late June (and have then been on vacation). As I just wrote
> in the bug report:
>
> There are two OperatingSystemMXBean interfaces:
> - java.lang.management.OperatingSystemMXBean
> - com.sun.management.OperatingSystemMXBean (a subtype of the former)
>
> What the methods of these two interface report depends on exactly how
> the method has been specified. If it refers to something "available to
> the JVM (or current process)" then it needs to be container aware. If
> it refers to the "whole system" or something "physical", then that
> should report information for the whole system.
>
> Arguably some of the whole-system/physical APIs are misguided and
> reflect a history where containers and virtualized environments were
> not envisaged. But changing them is a compatibility issue and so it
> may be better to add new methods that report more interesting/relevant
> information for the process's environment. Either way a CSR request
> will need to be filed and the changes examined from a compatibility
> perspective.
>
Agree.
When the APIs were introduced, it was defined for the whole system and
the spec should be made clear. If the APIs should be made
container-aware, the spec should be clarified of the new behavior.
Monitoring the whole system still provides a useful view even on a
container and virtualized environment. One idea to consider would be
to refactor com.sun.management.OperatingSystemMXBean and extract the
container-aware methods in a new MXBean which OSMXBean extends and
create one new singleton instance of the new MXBean to report
container-specific metrics.
> Some of the APIs may not be "well formed" in the first place - for
> example getSystemLoadAverage():
>
> "Returns the system load average for the last minute. The system load
> average is the sum of the number of runnable entities queued to the
> available processors and the number of runnable entities running on
> the available processors averaged over a period of time. "
>
> This refers to the "system" but specifies the calculation is based on
> "available processors" - which is a contradiction as "available" !=
> "system".
>
The spec should be updated to "system" in this case.
> So I think we need to take a step back at the moment and look at
> exactly which methods can be container-aware based on their current
> specification, and which should be container-aware but can't be
> because of their current specification, and so what new methods may be
> needed.
>
Bob's suggestion [1] to make the total/free physical memory and swap
space size container-aware sounds reasonable.
Refactoring c.s.m.OperatingSystemMXBean could be one option to explore.
Mandy
[1]
http://mail.openjdk.java.net/pipermail/serviceability-dev/2019-July/028710.html
More information about the serviceability-dev
mailing list