in geode-core/src/main/java/org/apache/geode/internal/util/PluckStacks.java [206:457]
boolean isExpectedStack(ThreadStack thread) {
String threadName = thread.getThreadName();
int stackSize = thread.size();
// keep all hydra threads
if (threadName.startsWith("vm_")) {
return false;
}
// these are never interesting to me
if (threadName.startsWith("StatDispatcher")) {
return true;
}
if (threadName.startsWith("State Logger Consumer Thread")) {
return true;
}
if (threadName.contains("StatSampler")) {
return true;
}
if (threadName.startsWith("IDLE p2pDestreamer")) {
return true;
}
if (threadName.startsWith("Idle OplogCompactor")) {
return true;
}
////////////// HIGH FREQUENCY STACKS //////////////////////
// check these first for efficiency
if (threadName.startsWith("Cache Client Updater Thread")) {
return stackSize == 13 && thread.get(2).contains("SocketInputStream.socketRead0");
}
if (threadName.startsWith("Client Message Dispatcher")) {
return stackSize == 13 && thread.get(1).contains("TIMED_WAITING");
}
if (threadName.startsWith("Function Execution Processor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("Geode Failure Detection Server")) {
return stackSize < 12 && thread.getFirstFrame().contains("socketAccept");
}
if (threadName.startsWith("Geode Membership Timer")) {
// System.out.println("gf timer stack size = " + stackSize + "; frame = " + thread.get(1));
return stackSize < 9 && !thread.isRunnable();
}
if (threadName.startsWith("Geode Membership View Creator")) {
// System.out.println("gf view creator stack size = " + stackSize + "; frame = " +
// thread.get(1));
return stackSize < 8 && !thread.isRunnable();
}
if (threadName.startsWith("Geode Heartbeat Sender")) {
return stackSize <= 8 && !thread.isRunnable();
}
// thread currently disabled
// if (threadName.startsWith("Geode Suspect Message Collector")) {
// return stackSize <= 7 && thread.get(1).contains("Thread.State: WAITING");
// }
if (threadName.startsWith("multicast receiver")) {
return (stackSize > 2 && thread.get(2).contains("PlainDatagramSocketImpl.receive"));
}
if (threadName.startsWith("P2P Listener")) {
// System.out.println("p2p listener stack size = " + stackSize + "; frame = " +
// thread.get(2));
return (stackSize == 8 && thread.get(2).contains("SocketChannelImpl.accept"));
}
if (threadName.startsWith(Connection.THREAD_KIND_IDENTIFIER)) {
return (stackSize <= 14 && (thread.getFirstFrame().contains("FileDispatcherImpl.read")
|| thread.getFirstFrame().contains("FileDispatcher.read")
|| thread.getFirstFrame().contains("SocketDispatcher.read")));
}
if (threadName.startsWith("PartitionedRegion Message Processor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("Pooled Message Processor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("Pooled High Priority Message Processor")) {
return isIdleExecutor(thread) || thread.get(4).contains("OSProcess.zipStacks");
}
if (threadName.startsWith("Pooled Serial Message Processor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("Pooled Waiting Message Processor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("ServerConnection")) {
if (thread.getFirstFrame().contains("socketRead")
&& (stackSize > 6 && thread.get(6).contains("fetchHeader"))) {
return true; // reading from a client
}
return isIdleExecutor(thread);
}
if (threadName.startsWith("TCP Check ServerSocket Thread")) {
return (stackSize >= 3 && thread.get(2).contains("socketAccept"));
}
if (threadName.startsWith("Timer runner")) {
// System.out.println("timer runner stack size = " + stackSize + "; frame = " +
// thread.get(1));
return (stackSize <= 10 && thread.get(1).contains("TIMED_WAITING"));
}
if (threadName.startsWith("TransferQueueBundler")) {
// System.out.println("transfer bundler stack size = " + stackSize + "; frame = " +
// thread.get(2));
return (stackSize == 9 && thread.get(2).contains("sun.misc.Unsafe.park"));
}
if (threadName.startsWith("unicast receiver")) {
// System.out.println("unicast receiver stack size = " + stackSize + "; frame = " +
// thread.get(3));
return (stackSize > 2 && thread.get(2).contains("PlainDatagramSocketImpl.receive"));
}
/////////////////////////////////////////////////////////////////////////
// Now check the rest of the product threads in alphabetical order
if (threadName.startsWith("Asynchronous disk writer")) {
return !thread.isRunnable() && stackSize <= 10
&& (stackSize >= 7 && (thread.get(5).contains("waitUntilFlushIsReady")
|| thread.get(6).contains("waitUntilFlushIsReady")));
}
if (threadName.startsWith("BridgeServer-LoadPollingThread")) {
return !thread.isRunnable() && stackSize == 5;
}
if (threadName.startsWith("Cache Server Acceptor")) {
return (thread.getFirstFrame().contains("socketAccept"));
}
if (threadName.startsWith("Client Message Dispatcher")) {
return (stackSize == 11 && thread.getFirstFrame().contains("socketWrite"))
|| (stackSize == 14 && thread.getFirstFrame().contains("Unsafe.park"));
}
if (threadName.equals("ClientHealthMonitor Thread")) {
return !thread.isRunnable() && stackSize == 4;
}
if (threadName.startsWith("Distribution Locator on")) {
return stackSize <= 9 && thread.getFirstFrame().contains("socketAccept");
}
if (threadName.startsWith("DM-MemberEventInvoker")) {
return !thread.isRunnable() && (stackSize == 9 && thread.get(6).contains("Queue.take"));
}
if (threadName.startsWith("Event Processor for GatewaySender")) {
return !thread.isRunnable()
&& thread.get(3).contains("ConcurrentParallelGatewaySenderQueue.peek");
}
if (threadName.startsWith("GC Daemon")) {
return !thread.isRunnable() && stackSize <= 6;
}
if (threadName.startsWith("Replicate/Partition Region Garbage Collector")) {
return !thread.isRunnable() && (stackSize <= 9);
}
if (threadName.startsWith("Non-replicate Region Garbage Collector")) {
return !thread.isRunnable() && (stackSize <= 9);
}
if (threadName.equals("GemFire Time Service")) {
return !thread.isRunnable();
}
if (threadName.startsWith("GlobalTXTimeoutMonitor")) {
return !thread.isRunnable()
&& (stackSize <= 8 && thread.getFirstFrame().contains("Object.wait"));
}
if (threadName.startsWith("JoinProcessor")) {
return !thread.isRunnable() && stackSize <= 7;
}
if (threadName.startsWith("locator request thread")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("Lock Grantor for")) {
return !thread.isRunnable() && stackSize <= 8;
}
if (threadName.startsWith("Management Task")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("osprocess reaper")) {
return (stackSize == 5);
}
if (threadName.startsWith("P2P-Handshaker")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("P2P Listener")) {
return (stackSize == 7 && thread.getFirstFrame().contains("accept0"));
}
if (threadName.startsWith("Queue Removal Thread")) {
return !thread.isRunnable()
&& (stackSize == 5 && thread.getFirstFrame().contains("Object.wait"));
}
if (threadName.startsWith("ResourceManagerRecoveryThread")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("RMI TCP Connection(idle)")) {
return true;
}
if (threadName.startsWith("RMI Reaper")) {
return true;
}
if (threadName.startsWith("RMI RenewClean")) {
return true;
}
if (threadName.startsWith("RMI Scheduler")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("RMI TCP Accept")) {
return true;
}
if (threadName.startsWith("RMI TCP Connection")) {
return thread.getFirstFrame().contains("socketRead0");
}
if (threadName.startsWith("SnapshotResultDispatcher")) {
return !thread.isRunnable() && stackSize <= 8;
}
if (threadName.startsWith("StatMonitorNotifier Thread")) {
return (stackSize > 8 && thread.get(7).contains("SynchronousQueue.take"));
}
if (threadName.startsWith("SystemFailure Proctor")) {
return !thread.isRunnable()
&& (stackSize == 6 && thread.getFirstFrame().contains("Thread.sleep"));
}
if (threadName.startsWith("SystemFailure WatchDog")) {
return (stackSize <= 8 && thread.getFirstFrame().contains("Object.wait"));
}
if (threadName.startsWith("ThresholdEventProcessor")) {
return isIdleExecutor(thread);
}
if (threadName.startsWith("ThreadsMonitor") && thread.getFirstFrame().contains("Object.wait")) {
return true;
}
if (threadName.startsWith("Timer-")) {
if (thread.isRunnable()) {
return true;
}
if ((stackSize <= 8) && thread.getFirstFrame().contains("Object.wait")) {
return true;
}
}
if (threadName.startsWith("TimeScheduler.Thread")) {
return !thread.isRunnable()
&& (stackSize <= 8 && thread.getFirstFrame().contains("Object.wait"));
}
if (threadName.startsWith("vfabric-license-heartbeat")) {
if (thread.isRunnable()) {
return false;
}
if (stackSize == 6 && thread.getFirstFrame().contains("Thread.sleep")) {
return true;
}
return (stackSize <= 7 && thread.getFirstFrame().contains("Object.wait"));
}
if (threadName.equals("WAN Locator Discovery Thread")) {
return (!thread.isRunnable() && thread.get(3).contains("exchangeRemoteLocators"));
}
return isIdleExecutor(thread);
}