This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new f5c8f5930f #10705 Control stack print lines (#10711)
f5c8f5930f is described below

commit f5c8f5930f59d64ca0df1e0ee651d9ec48f77364
Author: 不想当厨子的老谭 <[email protected]>
AuthorDate: Sun Oct 9 17:35:52 2022 +0800

    #10705 Control stack print lines (#10711)
---
 .../org/apache/dubbo/common/constants/CommonConstants.java  |  6 ++++++
 .../main/java/org/apache/dubbo/common/utils/JVMUtil.java    | 13 +++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index 8bb4ffe94f..2c2c188e72 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -583,4 +583,10 @@ public interface CommonConstants {
      */
     String UNLOAD_CLUSTER_RELATED = "unloadClusterRelated";
 
+    /**
+     *
+     * used in JVMUtil.java ,Control stack print lines, default is 32 lines
+     *
+     */
+    String DUBBO_JSTACK_MAXLINE = "dubbo.jstack-dump.max-line";
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/JVMUtil.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/JVMUtil.java
index 79c4aff3e4..2e8f912332 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/JVMUtil.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/JVMUtil.java
@@ -23,6 +23,8 @@ import java.lang.management.MonitorInfo;
 import java.lang.management.ThreadInfo;
 import java.lang.management.ThreadMXBean;
 
+import org.apache.dubbo.common.constants.CommonConstants;
+
 import static java.lang.Thread.State.BLOCKED;
 import static java.lang.Thread.State.TIMED_WAITING;
 import static java.lang.Thread.State.WAITING;
@@ -54,10 +56,17 @@ public class JVMUtil {
         }
         sb.append('\n');
         int i = 0;
-
+        // default is 32, means only print up to 32 lines
+        int jstackMaxLine = 32;
+        String jstackMaxLineStr = 
System.getProperty(CommonConstants.DUBBO_JSTACK_MAXLINE);
+        if(StringUtils.isNotEmpty(jstackMaxLineStr)) {
+            try {
+                jstackMaxLine = Integer.parseInt(jstackMaxLineStr);
+            }catch (Exception ignore) {}
+        }
         StackTraceElement[] stackTrace = threadInfo.getStackTrace();
         MonitorInfo[] lockedMonitors = threadInfo.getLockedMonitors();
-        for (; i < stackTrace.length && i < 32; i++) {
+        for (; i < stackTrace.length && i < jstackMaxLine; i++) {
             StackTraceElement ste = stackTrace[i];
             sb.append("\tat ").append(ste.toString());
             sb.append('\n');

Reply via email to