From 41e6b2adbe086daf2ba257c1f8b4fd2a722431fa Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 11 Aug 2017 18:57:56 +0100 Subject: [PATCH] Improve diagnostics when temporary heap dump file can't be deleted --- .../endpoint/web/HeapDumpWebEndpoint.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java index 43f16df6aa0..d1d4c00810e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java @@ -24,12 +24,16 @@ import java.lang.management.PlatformManagedObject; import java.lang.reflect.Method; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.endpoint.Endpoint; import org.springframework.boot.endpoint.EndpointType; @@ -184,6 +188,8 @@ public class HeapDumpWebEndpoint { private static final class TemporaryFileSystemResource extends FileSystemResource { + private final Log logger = LogFactory.getLog(getClass()); + private TemporaryFileSystemResource(File file) { super(file); } @@ -204,7 +210,7 @@ public class HeapDumpWebEndpoint { readableChannel.close(); } finally { - getFile().delete(); + deleteFile(); } } @@ -252,7 +258,7 @@ public class HeapDumpWebEndpoint { delegate.close(); } finally { - getFile().delete(); + deleteFile(); } } @@ -274,6 +280,17 @@ public class HeapDumpWebEndpoint { }; } + private void deleteFile() { + try { + Files.delete(getFile().toPath()); + } + catch (IOException ex) { + TemporaryFileSystemResource.this.logger.warn( + "Failed to delete temporary heap dump file '" + getFile() + "'", + ex); + } + } + @Override public boolean isFile() { // Prevent zero-copy so we can delete the file on close