49 import org.openjdk.jmc.common.util.IPreferenceValueProvider;
50 import org.openjdk.jmc.common.util.TypedPreference;
51 import org.openjdk.jmc.flightrecorder.JfrAttributes;
52 import org.openjdk.jmc.flightrecorder.jdk.JdkAttributes;
53 import org.openjdk.jmc.flightrecorder.jdk.JdkFilters;
54 import org.openjdk.jmc.flightrecorder.jdk.JdkQueries;
55 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
56 import org.openjdk.jmc.flightrecorder.rules.IRule;
57 import org.openjdk.jmc.flightrecorder.rules.Result;
58 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
59 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
60 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
61 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
62
63 public class IncreasingMetaspaceLiveSetRule implements IRule {
64
65 private static final String RESULT_ID = "IncreasingMetaSpaceLiveSet"; //$NON-NLS-1$
66
67 private Result getResult(IItemCollection items, IPreferenceValueProvider valueProvider) {
68 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.METASPACE_SUMMARY);
69 if (eventAvailability == EventAvailability.UNAVAILABLE || eventAvailability == EventAvailability.DISABLED) {
70 return RulesToolkit.getEventAvailabilityResult(this, items, eventAvailability,
71 JdkTypeIDs.METASPACE_SUMMARY);
72 }
73
74 IItemFilter afterFilter = ItemFilters.and(JdkFilters.METASPACE_SUMMARY_AFTER_GC, JdkFilters.AFTER_GC);
75 Iterator<? extends IItemIterable> allAfterItems = items.apply(afterFilter).iterator();
76 if (allAfterItems.hasNext()) {
77 IItemIterable afterItems = allAfterItems.next();
78 // FIXME: Handle multiple IItemIterable
79 IMemberAccessor<IQuantity, IItem> timeAccessor = JfrAttributes.END_TIME.getAccessor(afterItems.getType());
80 IMemberAccessor<IQuantity, IItem> memAccessor = JdkAttributes.GC_METASPACE_USED
81 .getAccessor(afterItems.getType());
82 double leastSquare = RulesToolkit.leastSquareMemory(afterItems.iterator(), timeAccessor, memAccessor);
83 // FIXME: Configuration attribute
84 double score = RulesToolkit.mapExp100(leastSquare, 0.75);
85 // FIXME: Should construct a message using leastSquare, not use a hard limit
86 if (score >= 25) {
87 String shortMessage = Messages.getString(Messages.IncreasingMetaspaceLiveSetRuleFactory_TEXT_INFO);
88 String longMessage = shortMessage + " " //$NON-NLS-1$
89 + Messages.getString(Messages.IncreasingMetaspaceLiveSetRuleFactory_TEXT_INFO_LONG);
|
49 import org.openjdk.jmc.common.util.IPreferenceValueProvider;
50 import org.openjdk.jmc.common.util.TypedPreference;
51 import org.openjdk.jmc.flightrecorder.JfrAttributes;
52 import org.openjdk.jmc.flightrecorder.jdk.JdkAttributes;
53 import org.openjdk.jmc.flightrecorder.jdk.JdkFilters;
54 import org.openjdk.jmc.flightrecorder.jdk.JdkQueries;
55 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
56 import org.openjdk.jmc.flightrecorder.rules.IRule;
57 import org.openjdk.jmc.flightrecorder.rules.Result;
58 import org.openjdk.jmc.flightrecorder.rules.jdk.messages.internal.Messages;
59 import org.openjdk.jmc.flightrecorder.rules.util.JfrRuleTopics;
60 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit;
61 import org.openjdk.jmc.flightrecorder.rules.util.RulesToolkit.EventAvailability;
62
63 public class IncreasingMetaspaceLiveSetRule implements IRule {
64
65 private static final String RESULT_ID = "IncreasingMetaSpaceLiveSet"; //$NON-NLS-1$
66
67 private Result getResult(IItemCollection items, IPreferenceValueProvider valueProvider) {
68 EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.METASPACE_SUMMARY);
69 if (eventAvailability == EventAvailability.UNKNOWN || eventAvailability == EventAvailability.DISABLED) {
70 return RulesToolkit.getEventAvailabilityResult(this, items, eventAvailability,
71 JdkTypeIDs.METASPACE_SUMMARY);
72 }
73
74 IItemFilter afterFilter = ItemFilters.and(JdkFilters.METASPACE_SUMMARY_AFTER_GC, JdkFilters.AFTER_GC);
75 Iterator<? extends IItemIterable> allAfterItems = items.apply(afterFilter).iterator();
76 if (allAfterItems.hasNext()) {
77 IItemIterable afterItems = allAfterItems.next();
78 // FIXME: Handle multiple IItemIterable
79 IMemberAccessor<IQuantity, IItem> timeAccessor = JfrAttributes.END_TIME.getAccessor(afterItems.getType());
80 IMemberAccessor<IQuantity, IItem> memAccessor = JdkAttributes.GC_METASPACE_USED
81 .getAccessor(afterItems.getType());
82 double leastSquare = RulesToolkit.leastSquareMemory(afterItems.iterator(), timeAccessor, memAccessor);
83 // FIXME: Configuration attribute
84 double score = RulesToolkit.mapExp100(leastSquare, 0.75);
85 // FIXME: Should construct a message using leastSquare, not use a hard limit
86 if (score >= 25) {
87 String shortMessage = Messages.getString(Messages.IncreasingMetaspaceLiveSetRuleFactory_TEXT_INFO);
88 String longMessage = shortMessage + " " //$NON-NLS-1$
89 + Messages.getString(Messages.IncreasingMetaspaceLiveSetRuleFactory_TEXT_INFO_LONG);
|