RFR(S): 8236938: [TESTBUG] JFR event MetaspaceAllocationFailure is not tested

mikhailo.seledtsov at oracle.com mikhailo.seledtsov at oracle.com
Sat Feb 29 00:05:51 UTC 2020


Hi Thomas,

    Thank you for review. Please see my comments inline.

On 2/27/20 11:15 AM, Thomas Stüfe wrote:
> Hi Mikhailo,
>
> looks good to me. Cannot comment on the effects of the class renaming.
>
> The test is of course vulnerable against changes in the metaspace 
> usage of the base jdk but I do not see how that could be changed. Make 
> sure you test with and without CDS enabled since if CDS is not enabled 
> or does not work the base JDK will use a lot more Metaspace and 20M 
> may not be enough. Or, make sure CDS is always enabled and working.

Good point, thanks.

I have added -Xshare:off to the @run params to make the test more 
deterministic. And I quickly ran into OOME:Metaspace, hence I increased 
the MaxMetaspaceSize to 100M.

Here is a new @run statement:

  * @run main/othervm -Xmx1G -XX:MaxMetaspaceSize=100M
  *      -XX:StartFlightRecording -Xshare:off
  *      jdk.jfr.event.runtime.TestMetaspaceAllocationFailure
  */


>
> If you want to be really thorough you may want to check exhaustion on 
> -XX:CompressedClassSpaceSize (with infinite MaxMetaspaceSize) too. As 
> a rough guide, each loaded class takes between 512 and 1K of space.

  Thanks. I have added another @run to the same test using 
CompressedClassSpaceSize:

  * @run main/othervm -Xmx1G -XX:CompressedClassSpaceSize=100M
  *      -XX:StartFlightRecording -Xshare:off
  *      jdk.jfr.event.runtime.TestMetaspaceAllocationFailure

It works, I am able to provoke the MetaspaceAllocationFailure JFR event.

I will do some more testing on multiple platforms.


Thank you,

Misha

>
> Cheers, Thomas
>
> On Thu, Feb 27, 2020 at 4:51 PM <mikhailo.seledtsov at oracle.com 
> <mailto:mikhailo.seledtsov at oracle.com>> wrote:
>
>     Please review this new test for JFR event MetaspaceAllocationFailure.
>
>     The test fills the metaspace by generating classes in a loop,
>     until the
>     desired event is delivered to the receiver.
>     By creating a new instance of class loader for each iteration test
>     allows metaspace to be cleaned up once MetaspaceAllocationFailure
>     condition is detected, thus not causing full-blown OOME. However, on
>     occasion, it may happen, hence the try/catch clause.
>     Ran this at least 100 times, works well and reliably.
>
>     Also moved the class generator utility from Runtime test library to
>     common test library; renamed it to avoid name clash with
>     another already existing GeneratingClassLoader.
>
>          JBS: https://bugs.openjdk.java.net/browse/JDK-8236938
>          Webrev: http://cr.openjdk.java.net/~mseledtsov/8236938.01/
>          Testing:
>              1. Ran over 100 times on Linux, Windows and MAC: All PASS
>              2. Ran all runtime tests that rely on the class loader
>     generator runtime library.
>
>
>     Thank you,
>     Misha
>


More information about the hotspot-jfr-dev mailing list