Skip to content

使用 arthas-boot 时,可能会阻塞在查找 tcp 端口上 #3007

@hengyunabc

Description

@hengyunabc
" main" #1 prio=5 os_prio=0 tid=0x00007f464c008940 nid=0x2703e runnable [0x00007f4654c02000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:255)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
        - locked <0x000000071bdcbb50> (a java.lang.UNIXProcess$ProcessPipeInputStream)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
        - locked <0x000000071bdd6010> (a java.io.InputStreamReader)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.io.BufferedReader.readLine(BufferedReader.java:324)
        - locked <0x000000071bdd6010> (a java.io.InputStreamReader)
        at java.io.BufferedReader.readLine(BufferedReader.java:389)
        at com.taobao.arthas.common.ExecutingCommand.runNative(ExecutingCommand.java:61)
        at com.taobao.arthas.common.ExecutingCommand.runNative(ExecutingCommand.java:31)
        at com.taobao.arthas.common.ExecutingCommand.getAnswerAt(ExecutingCommand.java:102)
        at com.taobao.arthas.common.ExecutingCommand.getFirstAnswer(ExecutingCommand.java:87)
        at com.taobao.arthas.common.SocketUtils.findTcpListenProcess(SocketUtils.java:53)
        at com.taobao.arthas.boot.Bootstrap.main(Bootstrap.java:367)
    public static long findTcpListenProcess(int port) {
        try {
            if (OSUtils.isWindows()) {
                String[] command = { "netstat", "-ano", "-p", "TCP" };
                List<String> lines = ExecutingCommand.runNative(command);
                for (String line : lines) {
                    if (line.contains("LISTENING")) {
                        // TCP 0.0.0.0:49168 0.0.0.0:0 LISTENING 476
                        String[] strings = line.trim().split("\\s+");
                        if (strings.length == 5) {
                            if (strings[1].endsWith(":" + port)) {
                                return Long.parseLong(strings[4]);
                            }
                        }
                    }
                }
            }

            if (OSUtils.isLinux() || OSUtils.isMac()) {
                String pid = ExecutingCommand.getFirstAnswer("lsof -t -s TCP:LISTEN -i TCP:" + port);
                if (!pid.trim().isEmpty()) {
                    return Long.parseLong(pid);
                }
            }
        } catch (Throwable e) {
            // ignore
        }

        return -1;
    }

可以尝试查找 netstat 和 lsof 进程,kill掉。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions