Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.
/ lanai Public archive

Commit 65c461e

Browse files
committedJun 10, 2020
8247320: JFR: Reduce logging overhead
Reviewed-by: mgronlun
1 parent 7e3d4f8 commit 65c461e

12 files changed

+68
-40
lines changed
 

‎src/jdk.jfr/share/classes/jdk/jfr/FlightRecorder.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,19 @@ public static FlightRecorder getFlightRecorder() throws IllegalStateException, S
187187
// before initialization is done
188188
initialized = true;
189189
Logger.log(JFR, INFO, "Flight Recorder initialized");
190-
Logger.log(JFR, DEBUG, "maxchunksize: " + Options.getMaxChunkSize()+ " bytes");
191-
Logger.log(JFR, DEBUG, "memorysize: " + Options.getMemorySize()+ " bytes");
192-
Logger.log(JFR, DEBUG, "globalbuffersize: " + Options.getGlobalBufferSize()+ " bytes");
193-
Logger.log(JFR, DEBUG, "globalbuffercount: " + Options.getGlobalBufferCount());
194-
Logger.log(JFR, DEBUG, "dumppath: " + Options.getDumpPath());
195-
Logger.log(JFR, DEBUG, "samplethreads: " + Options.getSampleThreads());
196-
Logger.log(JFR, DEBUG, "stackdepth: " + Options.getStackDepth());
197-
Logger.log(JFR, DEBUG, "threadbuffersize: " + Options.getThreadBufferSize());
198-
Logger.log(JFR, LogLevel.INFO, "Repository base directory: " + Repository.getRepository().getBaseLocation());
190+
if (Logger.shouldLog(JFR, DEBUG)) {
191+
Logger.log(JFR, DEBUG, "maxchunksize: " + Options.getMaxChunkSize()+ " bytes");
192+
Logger.log(JFR, DEBUG, "memorysize: " + Options.getMemorySize()+ " bytes");
193+
Logger.log(JFR, DEBUG, "globalbuffersize: " + Options.getGlobalBufferSize()+ " bytes");
194+
Logger.log(JFR, DEBUG, "globalbuffercount: " + Options.getGlobalBufferCount());
195+
Logger.log(JFR, DEBUG, "dumppath: " + Options.getDumpPath());
196+
Logger.log(JFR, DEBUG, "samplethreads: " + Options.getSampleThreads());
197+
Logger.log(JFR, DEBUG, "stackdepth: " + Options.getStackDepth());
198+
Logger.log(JFR, DEBUG, "threadbuffersize: " + Options.getThreadBufferSize());
199+
}
200+
if (Logger.shouldLog(JFR, INFO)) {
201+
Logger.log(JFR, INFO, "Repository base directory: " + Repository.getRepository().getBaseLocation());
202+
}
199203
PlatformRecorder.notifyRecorderInitialized(platformRecorder);
200204
}
201205
}

‎src/jdk.jfr/share/classes/jdk/jfr/internal/ASMToolkit.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,13 @@ public static Method makeWriteMethod(List<FieldInfo> fields) {
149149

150150
public static void logASM(String className, byte[] bytes) {
151151
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.INFO, "Generated bytecode for class " + className);
152-
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.TRACE, () -> {
152+
if (Logger.shouldLog(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.TRACE)) {
153153
ClassReader cr = new ClassReader(bytes);
154154
ByteArrayOutputStream baos = new ByteArrayOutputStream();
155155
PrintWriter w = new PrintWriter(baos);
156156
w.println("Bytecode:");
157157
cr.accept(new TraceClassVisitor(w), 0);
158-
return baos.toString();
159-
});
158+
};
160159
}
161160

162161
}

‎src/jdk.jfr/share/classes/jdk/jfr/internal/Logger.java

-6
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ public static void log(LogTag logTag, LogLevel logLevel, String message) {
4747
}
4848
}
4949

50-
public static void log(LogTag logTag, LogLevel logLevel, Supplier<String> messageSupplier) {
51-
if (shouldLog(logTag, logLevel)) {
52-
logInternal(logTag, logLevel, messageSupplier.get());
53-
}
54-
}
55-
5650
private static void logInternal(LogTag logTag, LogLevel logLevel, String message) {
5751
if (message == null || message.length() < MAX_SIZE) {
5852
JVM.log(logTag.id, logLevel.level, message);

‎src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public static List<Type> createTypes() throws IOException {
221221
SAXParser parser = new SAXParserImpl();
222222
MetadataHandler t = new MetadataHandler();
223223
try (InputStream is = new BufferedInputStream(SecuritySupport.getResourceAsStream("/jdk/jfr/internal/types/metadata.xml"))) {
224-
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, () -> "Parsing metadata.xml");
224+
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Parsing metadata.xml");
225225
try {
226226
parser.parse(is, t);
227227
return t.buildTypes();

‎src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public long start() {
115115
startTime = null;
116116
}
117117
startNanos = recorder.start(this);
118-
Logger.log(LogTag.JFR, LogLevel.INFO, () -> {
118+
if (Logger.shouldLog(LogTag.JFR, LogLevel.INFO)) {
119119
// Only print non-default values so it easy to see
120120
// which options were added
121121
StringJoiner options = new StringJoiner(", ");
@@ -141,8 +141,9 @@ public long start() {
141141
if (optionText.length() != 0) {
142142
optionText = "{" + optionText + "}";
143143
}
144-
return "Started recording \"" + getName() + "\" (" + getId() + ") " + optionText;
145-
});
144+
Logger.log(LogTag.JFR, LogLevel.INFO,
145+
"Started recording \"" + getName() + "\" (" + getId() + ") " + optionText);
146+
};
146147
newState = getState();
147148
}
148149
notifyIfStateChanged(oldState, newState);
@@ -576,12 +577,16 @@ void add(RepositoryChunk c) {
576577
private void added(RepositoryChunk c) {
577578
c.use();
578579
size += c.getSize();
579-
Logger.log(JFR, DEBUG, () -> "Recording \"" + name + "\" (" + id + ") added chunk " + c.toString() + ", current size=" + size);
580+
if (Logger.shouldLog(JFR, DEBUG)) {
581+
Logger.log(JFR, DEBUG, "Recording \"" + name + "\" (" + id + ") added chunk " + c.toString() + ", current size=" + size);
582+
}
580583
}
581584

582585
private void removed(RepositoryChunk c) {
583586
size -= c.getSize();
584-
Logger.log(JFR, DEBUG, () -> "Recording \"" + name + "\" (" + id + ") removed chunk " + c.toString() + ", current size=" + size);
587+
if (Logger.shouldLog(JFR, DEBUG)) {
588+
Logger.log(JFR, DEBUG, "Recording \"" + name + "\" (" + id + ") removed chunk " + c.toString() + ", current size=" + size);
589+
}
585590
c.release();
586591
}
587592

‎src/jdk.jfr/share/classes/jdk/jfr/internal/RepositoryChunk.java

+18-6
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ private void finishWithException(Instant endTime) throws IOException {
9090
unFinishedRAF.close();
9191
this.size = SecuritySupport.getFileSize(chunkFile);
9292
this.endTime = endTime;
93-
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, () -> "Chunk finished: " + chunkFile);
93+
if (Logger.shouldLog(LogTag.JFR_SYSTEM, LogLevel.DEBUG)) {
94+
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Chunk finished: " + chunkFile);
95+
}
9496
}
9597

9698
public Instant getStartTime() {
@@ -104,11 +106,15 @@ public Instant getEndTime() {
104106
private void delete(SafePath f) {
105107
try {
106108
SecuritySupport.delete(f);
107-
Logger.log(LogTag.JFR, LogLevel.DEBUG, () -> "Repository chunk " + f + " deleted");
109+
if (Logger.shouldLog(LogTag.JFR, LogLevel.DEBUG)) {
110+
Logger.log(LogTag.JFR, LogLevel.DEBUG, "Repository chunk " + f + " deleted");
111+
}
108112
} catch (IOException e) {
109113
// Probably happens because file is being streamed
110114
// on Windows where files in use can't be removed.
111-
Logger.log(LogTag.JFR, LogLevel.DEBUG, () -> "Repository chunk " + f + " could not be deleted: " + e.getMessage());
115+
if (Logger.shouldLog(LogTag.JFR, LogLevel.DEBUG)) {
116+
Logger.log(LogTag.JFR, LogLevel.DEBUG, "Repository chunk " + f + " could not be deleted: " + e.getMessage());
117+
}
112118
if (f != null) {
113119
FilePurger.add(f);
114120
}
@@ -123,18 +129,24 @@ private void destroy() {
123129
try {
124130
unFinishedRAF.close();
125131
} catch (IOException e) {
126-
Logger.log(LogTag.JFR, LogLevel.ERROR, () -> "Could not close random access file: " + chunkFile.toString() + ". File will not be deleted due to: " + e.getMessage());
132+
if (Logger.shouldLog(LogTag.JFR, LogLevel.ERROR)) {
133+
Logger.log(LogTag.JFR, LogLevel.ERROR, "Could not close random access file: " + chunkFile.toString() + ". File will not be deleted due to: " + e.getMessage());
134+
}
127135
}
128136
}
129137

130138
public synchronized void use() {
131139
++refCount;
132-
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, () -> "Use chunk " + toString() + " ref count now " + refCount);
140+
if (Logger.shouldLog(LogTag.JFR_SYSTEM, LogLevel.DEBUG)) {
141+
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Use chunk " + toString() + " ref count now " + refCount);
142+
}
133143
}
134144

135145
public synchronized void release() {
136146
--refCount;
137-
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, () -> "Release chunk " + toString() + " ref count now " + refCount);
147+
if (Logger.shouldLog(LogTag.JFR_SYSTEM, LogLevel.DEBUG)) {
148+
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Release chunk " + toString() + " ref count now " + refCount);
149+
}
138150
if (refCount == 0) {
139151
destroy();
140152
}

‎src/jdk.jfr/share/classes/jdk/jfr/internal/RequestEngine.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ private void execute() {
6868
} else {
6969
jvm.emitEvent(type.getId(), JVM.counterTime(), 0);
7070
}
71-
Logger.log(LogTag.JFR_SYSTEM_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName());
71+
if (Logger.shouldLog(LogTag.JFR_SYSTEM_EVENT, LogLevel.DEBUG)) {
72+
Logger.log(LogTag.JFR_SYSTEM_EVENT, LogLevel.DEBUG, "Executed periodic hook for " + type.getLogName());
73+
}
7274
} else {
7375
executeSecure();
7476
}
@@ -84,7 +86,9 @@ private void executeSecure() {
8486
public Void run() {
8587
try {
8688
hook.run();
87-
Logger.log(LogTag.JFR_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName());
89+
if (Logger.shouldLog(LogTag.JFR_EVENT, LogLevel.DEBUG)) {
90+
Logger.log(LogTag.JFR_EVENT, LogLevel.DEBUG, "Executed periodic hook for " + type.getLogName());
91+
}
8892
} catch (Throwable t) {
8993
// Prevent malicious user to propagate exception callback in the wrong context
9094
Logger.log(LogTag.JFR_EVENT, LogLevel.WARN, "Exception occurred during execution of period hook for " + type.getLogName());

‎src/jdk.jfr/share/classes/jdk/jfr/internal/ShutdownHook.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ private void dump(PlatformRecording recording) {
7171
recording.stop("Dump on exit");
7272
}
7373
} catch (Exception e) {
74-
Logger.log(LogTag.JFR, LogLevel.DEBUG, () -> "Could not dump recording " + recording.getName() + " on exit.");
74+
if (Logger.shouldLog(LogTag.JFR, LogLevel.DEBUG)) {
75+
Logger.log(LogTag.JFR, LogLevel.DEBUG, "Could not dump recording " + recording.getName() + " on exit.");
76+
}
7577
}
7678
}
7779

‎src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkParser.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,10 @@ private void fillConstantPools(long abortCP) throws IOException {
318318
final long logLastCP = lastCP;
319319
final long logDelta = delta;
320320
if (logTrace) {
321-
Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, () -> {
322-
return "New constant pool: startPosition=" + logLastCP + ", size=" + size + ", deltaToNext=" + logDelta + ", flush=" + flush + ", poolCount=" + poolCount;
323-
});
321+
Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE,
322+
"New constant pool: startPosition=" + logLastCP +
323+
", size=" + size + ", deltaToNext=" + logDelta +
324+
", flush=" + flush + ", poolCount=" + poolCount);
324325
}
325326
for (int i = 0; i < poolCount; i++) {
326327
long id = input.readLong(); // type id

‎src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ public static byte[] retransformCallback(Class<?> klass, byte[] oldBytes) throws
158158
for (int i = 0; i < targetClasses.length; i++) {
159159
if (targetClasses[i].equals(klass)) {
160160
Class<?> c = instrumentationClasses[i];
161-
Logger.log(LogTag.JFR_SYSTEM, LogLevel.TRACE, () -> "Processing instrumentation class: " + c);
161+
if (Logger.shouldLog(LogTag.JFR_SYSTEM, LogLevel.TRACE)) {
162+
Logger.log(LogTag.JFR_SYSTEM, LogLevel.TRACE, "Processing instrumentation class: " + c);
163+
}
162164
return new JIClassInstrumentation(instrumentationClasses[i], klass, oldBytes).getNewBytes();
163165
}
164166
}

‎src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JIMethodCallInliner.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,11 @@ public JIMethodCallInliner(int access, String desc, MethodVisitor mv,
7575
this.newClass = newClass;
7676
this.inlineTarget = inlineTarget;
7777

78-
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG, "MethodCallInliner: targetMethod=" + newClass + "."
78+
if (Logger.shouldLog(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG)) {
79+
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG,
80+
"MethodCallInliner: targetMethod=" + newClass + "."
7981
+ inlineTarget.name + inlineTarget.desc);
82+
}
8083
}
8184

8285
@Override

‎src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JIMethodMergeAdapter.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,10 @@ public void visitEnd() {
9696
for (MethodNode mn : cn.methods) {
9797
// Check if the method is in the list of methods to copy
9898
if (methodInFilter(mn.name, mn.desc)) {
99-
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG, "Copying method: " + mn.name + mn.desc);
100-
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG, " with mapper: " + typeMap);
99+
if (Logger.shouldLog(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG)) {
100+
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG, "Copying method: " + mn.name + mn.desc);
101+
Logger.log(LogTag.JFR_SYSTEM_BYTECODE, LogLevel.DEBUG, " with mapper: " + typeMap);
102+
}
101103

102104
String[] exceptions = new String[mn.exceptions.size()];
103105
mn.exceptions.toArray(exceptions);

0 commit comments

Comments
 (0)
This repository has been archived.