You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/12/05 14:42:04 UTC
[42/50] [abbrv] ignite git commit: debugging TC hangs
debugging TC hangs
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6414b3f4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6414b3f4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6414b3f4
Branch: refs/heads/ignite-comm-balance-master
Commit: 6414b3f45dd61350e5c3cfab1be886cf779c9118
Parents: 9fea9f8
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Wed Nov 30 17:43:35 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Wed Nov 30 17:43:35 2016 +0700
----------------------------------------------------------------------
.../ignite/internal/util/IgniteUtils.java | 22 +++++++++++++++++-
.../ignite/internal/util/StripedExecutor.java | 24 ++++++++++++++++----
2 files changed, 40 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/6414b3f4/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 5db7964..aefcbb5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -149,7 +149,6 @@ import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteInterruptedException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.binary.BinaryRawReader;
import org.apache.ignite.binary.BinaryRawWriter;
import org.apache.ignite.cluster.ClusterGroupEmptyException;
@@ -1297,6 +1296,27 @@ public abstract class IgniteUtils {
}
/**
+ * @param threadId Thread ID.
+ * @param sb Builder.
+ */
+ public static void printStackTrace(long threadId, GridStringBuilder sb) {
+ ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
+
+ ThreadInfo threadInfo = mxBean.getThreadInfo(threadId);
+
+ printThreadInfo(threadInfo, sb, Collections.<Long>emptySet());
+ }
+
+ /**
+ * @return {@code true} if there is java level deadlock.
+ */
+ public static boolean deadlockPresent() {
+ ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
+
+ return !F.isEmpty(mxBean.findDeadlockedThreads());
+ }
+
+ /**
* Prints single thread info to a buffer.
*
* @param threadInfo Thread info.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6414b3f4/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
index df70ae9..189d64e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
@@ -51,7 +51,7 @@ public class StripedExecutor implements ExecutorService {
*
* @param cnt Count.
*/
- public StripedExecutor(int cnt, String gridName, String poolName, IgniteLogger log) {
+ public StripedExecutor(int cnt, String gridName, String poolName, final IgniteLogger log) {
boolean success = false;
stripes = new Stripe[cnt];
@@ -72,16 +72,30 @@ public class StripedExecutor implements ExecutorService {
@Override public void run() {
for (; !isShutdown();) {
try {
- Thread.sleep(10000);
+ Thread.sleep(10_000);
}
catch (InterruptedException e) {
return;
}
for (Stripe stripe : stripes) {
- if (stripe.queueSize() > 0)
- System.out.println(">>> Possible starvation in striped pool: " +
- stripe.thread.getName() + " - " + stripe.queueToString());
+ if (stripe.queueSize() > 0) {
+ boolean deadlockPresent = U.deadlockPresent();
+
+ GridStringBuilder sb = new GridStringBuilder();
+
+ sb.a(">>> Possible starvation in striped pool: ")
+ .a(stripe.thread.getName()).a(U.nl())
+ .a(stripe.queueToString()).a(U.nl())
+ .a("deadlock: ").a(deadlockPresent).a(U.nl());
+
+ U.printStackTrace(stripe.thread.getId(), sb);
+
+ String msg = sb.toString();
+
+ U.warn(log, msg);
+ U.warn(null, msg);
+ }
}
}
}