Core: include timestamp and params in hot threads

Include the timestamp and params (interval, busiestThreads,
ignoreIdleThreads), when hot threads were collected.

Closes #9773
This commit is contained in:
Michael McCandless 2015-02-19 15:10:17 -05:00 committed by mikemccand
parent 7dad162377
commit 4859ce5d79
2 changed files with 28 additions and 0 deletions

View File

@ -21,6 +21,8 @@ package org.elasticsearch.monitor.jvm;
import org.apache.lucene.util.CollectionUtil;
import org.elasticsearch.ElasticsearchIllegalArgumentException;
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
import org.elasticsearch.common.joda.Joda;
import org.elasticsearch.common.unit.TimeValue;
import java.lang.management.ManagementFactory;
@ -35,6 +37,8 @@ public class HotThreads {
private static final Object mutex = new Object();
private static final FormatDateTimeFormatter DATE_TIME_FORMATTER = Joda.forPattern("dateOptionalTime");
private int busiestThreads = 3;
private TimeValue interval = new TimeValue(500, TimeUnit.MILLISECONDS);
private TimeValue threadElementsSnapshotDelay = new TimeValue(10);
@ -122,6 +126,17 @@ public class HotThreads {
private String innerDetect() throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("Hot threads at ");
sb.append(DATE_TIME_FORMATTER.printer().print(System.currentTimeMillis()));
sb.append(", interval=");
sb.append(interval);
sb.append(", busiestThreads=");
sb.append(busiestThreads);
sb.append(", ignoreIdleThreads=");
sb.append(ignoreIdleThreads);
sb.append(":\n");
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
boolean enabledCpu = false;
try {

View File

@ -163,4 +163,17 @@ public class HotThreadsTest extends ElasticsearchIntegrationTest {
// The filtered stacks should be smaller than unfiltered ones:
assertThat(totSizeIgnoreIdle, lessThan(totSizeAll));
}
public void testTimestampAndParams() throws ExecutionException, InterruptedException {
NodesHotThreadsResponse response = client().admin().cluster().prepareNodesHotThreads().execute().get();
for (NodeHotThreads node : response.getNodesMap().values()) {
String result = node.getHotThreads();
assertTrue(result.indexOf("Hot threads at") != -1);
assertTrue(result.indexOf("interval=500ms") != -1);
assertTrue(result.indexOf("busiestThreads=3") != -1);
assertTrue(result.indexOf("ignoreIdleThreads=true") != -1);
}
}
}