Skip to content

Commit e5adae3

Browse files
Anatoly MozgovAnatoly Mozgov
authored andcommitted
Minor polishing and renaming
1 parent e919abe commit e5adae3

File tree

4 files changed

+56
-46
lines changed

4 files changed

+56
-46
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# ibm-heapdump-spring-boot-actuator
2-
A lib to make the Spring Boot Actuator `/actuator/heapdump` endpoint work on IBM JRE
2+
A library that that makes the Spring Boot Actuator `/actuator/heapdump` endpoint work both on IBM J9 JVM and on HotSpot JVM.
3+
4+
First tries to see if the app is on J9 JVM, and falls back to Spring Boot default if it doesn't seem so.
35

46
# Usage
57

@@ -13,17 +15,17 @@ A lib to make the Spring Boot Actuator `/actuator/heapdump` endpoint work on IBM
1315
</dependency>
1416
```
1517

16-
2. Configure `IBMHeapdumpMvcEndpoint` bean
18+
2. Configure `J9HeapdumpMvcEndpoint` bean
1719
```
18-
import com.github.sa1nt.ibmheapdump.IBMHeapdumpMvcEndpoint;
20+
import com.github.sa1nt.ibmheapdump.J9HeapdumpMvcEndpoint;
1921
import org.springframework.context.annotation.Bean;
2022
import org.springframework.context.annotation.Configuration;
2123
2224
@Configuration
23-
public class IbmHeapdumpConfiguration {
25+
public class IBMHeapdumpConfiguration {
2426
@Bean
25-
public IBMHeapdumpMvcEndpoint ibmHeapdumpMvcEndpoint() {
26-
return new IBMHeapdumpMvcEndpoint();
27+
public J9HeapdumpMvcEndpoint ibmHeapdumpMvcEndpoint() {
28+
return new J9HeapdumpMvcEndpoint();
2729
}
2830
}
2931
```

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.github.sa1nt</groupId>
1414
<artifactId>ibm-heapdump-spring-boot-actuator</artifactId>
15-
<version>0.2</version>
15+
<version>0.3</version>
1616

1717
<dependencies>
1818
<dependency>

src/main/java/com/github/sa1nt/ibmheapdump/IBMHeapdumpMvcEndpoint.java

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.github.sa1nt.ibmheapdump;
2+
3+
import org.apache.commons.logging.Log;
4+
import org.apache.commons.logging.LogFactory;
5+
import org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint;
6+
import org.springframework.util.ClassUtils;
7+
import org.springframework.util.ReflectionUtils;
8+
9+
import java.io.File;
10+
import java.lang.reflect.Method;
11+
import java.util.concurrent.TimeUnit;
12+
13+
public class J9HeapdumpMvcEndpoint extends HeapdumpMvcEndpoint {
14+
private static final Log logger = LogFactory.getLog(J9HeapdumpMvcEndpoint.class);
15+
16+
private static final String DUMP_CLASS_NAME = "com.ibm.jvm.Dump";
17+
private static final String DUMP_METHOD_NAME = "heapDumpToFile";
18+
19+
public J9HeapdumpMvcEndpoint() {
20+
super(TimeUnit.SECONDS.toMillis(10));
21+
}
22+
23+
@Override
24+
protected HeapDumper createHeapDumper() throws HeapDumperUnavailableException {
25+
try {
26+
Class<?> ibmDumpClass = ClassUtils.forName(DUMP_CLASS_NAME, null);
27+
Method ibmDumpMethod = ReflectionUtils.findMethod(ibmDumpClass, DUMP_METHOD_NAME, String.class);
28+
logger.debug("Initializing J9 HeapDumper");
29+
return new J9JvmHeapDumper(ibmDumpMethod);
30+
} catch (ClassNotFoundException e) {
31+
logger.debug("Initializing default HeapDumper");
32+
return super.createHeapDumper();
33+
}
34+
}
35+
36+
static class J9JvmHeapDumper implements HeapDumper {
37+
private final Method dumpMethod;
38+
39+
J9JvmHeapDumper(Method dumpMethod) {
40+
this.dumpMethod = dumpMethod;
41+
}
42+
43+
public void dumpHeap(File file, boolean live) {
44+
ReflectionUtils.invokeMethod(dumpMethod, null, file.getAbsolutePath());
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)