aboutsummaryrefslogtreecommitdiff
path: root/spark-common/src/main/java/me/lucko/spark/common
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2018-09-30 21:05:19 +0100
committerLuck <git@lucko.me>2018-09-30 21:05:19 +0100
commit32bc0480ca20b19dcb04ca62b8934913c8a938c5 (patch)
tree6115758919cc9c7d0e73b184419e4a99f32067c0 /spark-common/src/main/java/me/lucko/spark/common
parent272ad91f788f730d3e79a9d2b91cb5f276a92961 (diff)
downloadspark-32bc0480ca20b19dcb04ca62b8934913c8a938c5.tar.gz
spark-32bc0480ca20b19dcb04ca62b8934913c8a938c5.tar.bz2
spark-32bc0480ca20b19dcb04ca62b8934913c8a938c5.zip
Implement basic heap dump functionality
Diffstat (limited to 'spark-common/src/main/java/me/lucko/spark/common')
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/CommandHandler.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/CommandHandler.java b/spark-common/src/main/java/me/lucko/spark/common/CommandHandler.java
index 91428ea..b95ce3d 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/CommandHandler.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/CommandHandler.java
@@ -25,6 +25,7 @@ import com.google.common.collect.SetMultimap;
import com.google.common.collect.Sets;
import me.lucko.spark.common.http.Bytebin;
+import me.lucko.spark.memory.HeapDump;
import me.lucko.spark.profiler.Sampler;
import me.lucko.spark.profiler.SamplerBuilder;
import me.lucko.spark.profiler.ThreadDumper;
@@ -32,6 +33,7 @@ import me.lucko.spark.profiler.ThreadGrouper;
import me.lucko.spark.profiler.TickCounter;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -107,6 +109,10 @@ public abstract class CommandHandler<T> {
case "monitoring":
handleMonitoring(sender, arguments);
break;
+ case "heap":
+ case "memory":
+ handleHeap(sender);
+ break;
default:
sendInfo(sender);
break;
@@ -316,6 +322,31 @@ public abstract class CommandHandler<T> {
}
}
+ private void handleHeap(T sender) {
+ runAsync(() -> {
+ sendPrefixedMessage("&7Creating a new heap dump, please wait...");
+
+ HeapDump heapDump;
+ try {
+ heapDump = HeapDump.createNew();
+ } catch (Exception e) {
+ sendPrefixedMessage("&cAn error occurred whilst inspecting the heap.");
+ e.printStackTrace();
+ return;
+ }
+
+ byte[] output = heapDump.formCompressedDataPayload();
+ try {
+ String pasteId = Bytebin.postCompressedContent(output);
+ sendPrefixedMessage("&bHeap dump output:");
+ sendLink(VIEWER_URL + pasteId);
+ } catch (IOException e) {
+ sendPrefixedMessage("&cAn error occurred whilst uploading the data.");
+ e.printStackTrace();
+ }
+ });
+ }
+
private class ReportingTickMonitor extends TickMonitor {
ReportingTickMonitor(TickCounter tickCounter, int percentageChangeThreshold) {
super(tickCounter, percentageChangeThreshold);
@@ -365,7 +396,7 @@ public abstract class CommandHandler<T> {
// store existing value, if present
if (flag != null) {
- arguments.put(flag, value.stream().collect(Collectors.joining(" ")));
+ arguments.put(flag, String.join(" ", value));
}
flag = match.toLowerCase();
@@ -378,7 +409,7 @@ public abstract class CommandHandler<T> {
// store remaining value, if present
if (flag != null) {
- arguments.put(flag, value.stream().collect(Collectors.joining(" ")));
+ arguments.put(flag, String.join(" ", value));
}
return arguments;