alibaba / arthas

Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas
https://arthas.aliyun.com/
Apache License 2.0
35.63k stars 7.49k forks source link

as.sh 脚本 有 -c 参数 支持手动选择pid,避免执行批量脚本开发重复逻辑 #1497

Closed WangJi92 closed 3 years ago

WangJi92 commented 4 years ago

环境信息

重现问题的步骤

  1. 执行 ./as.sh -c 'getstatic java.lang.String serialVersionUID -x 3' 期待可以手动选择pid ,这样其他的自动化脚本可以使用预配置和手动结合两种方法。
  2. 目前的执行直接没有pid 报错,必须要 ./as.sh -c 'getstatic java.lang.String serialVersionUID -x 3' --select 2440 这样才ok
  3. 参考arthas的as.sh脚本,选择pid arthas idea plugin pr 需要手动选择,但是脚本中就必须copy 一下 as.sh的选择pid的内容,其他的集成这种脚本也会有这样的问题。

期望的结果

执行 ./as.sh -c 'getstatic java.lang.String serialVersionUID -x 3' 期待可以手动选择pid

实际运行的结果

目前执行as.sh 异常

 ./as.sh  -c 'getstatic java.lang.String serialVersionUID -x 3'
Arthas script version: 3.3.9
[INFO] JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
[INFO] Process 2440 already using port 3658
[INFO] Process 2440 already using port 8563
Illegal arguments, the <PID> is required.

Usage:
    ./as.sh [-h] [--target-ip <value>] [--telnet-port <value>]
       [--http-port <value>] [--session-timeout <value>] [--arthas-home <value>]
       [--tunnel-server <value>] [--agent-id <value>] [--stat-url <value>]
       [--use-version <value>] [--repo-mirror <value>] [--versions] [--use-http]
       [--attach-only] [-c <value>] [-f <value>] [-v] [pid]

Options and Arguments:
 -h,--help                      Print usage
    --target-ip <value>         The target jvm listen ip, default 127.0.0.1
    --telnet-port <value>       The target jvm listen telnet port, default 3658
    --http-port <value>         The target jvm listen http port, default 8563
    --session-timeout <value>   The session timeout seconds, default 1800 (30min)
    --arthas-home <value>       The arthas home
    --use-version <value>       Use special version arthas
    --repo-mirror <value>       Use special remote repository mirror, value is
                                center/aliyun or http repo url.
    --versions                  List local and remote arthas versions
    --use-http                  Enforce use http to download, default use https
    --attach-only               Attach target process only, do not connect
    --debug-attach              Debug attach agent
    --tunnel-server             Remote tunnel server url
    --agent-id                  Special agent id
    --select                    select target process by classname or JARfilename
 -c,--command <value>           Command to execute, multiple commands separated
                                by ;
 -f,--batch-file <value>        The batch file to execute
    --height <value>            arthas-client terminal height
    --width <value>             arthas-client terminal width
 -v,--verbose                   Verbose, print debug info.
 <pid>                          Target pid

EXAMPLES:
  ./as.sh <pid>
  ./as.sh --target-ip 0.0.0.0
  ./as.sh --telnet-port 9999 --http-port -1
  ./as.sh --tunnel-server 'ws://192.168.10.11:7777/ws'
  ./as.sh --tunnel-server 'ws://192.168.10.11:7777/ws' --agent-id bvDOe8XbTM2pQWjF4cfw
  ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'
  ./as.sh -c 'sysprop; thread' <pid>
  ./as.sh -f batch.as <pid>
  ./as.sh --use-version 3.3.9
  ./as.sh --session-timeout 3600
  ./as.sh --attach-only
  ./as.sh --select arthas-demo
  ./as.sh --repo-mirror aliyun --use-http
WIKI:
  https://arthas.aliyun.com/doc

Here is the list of possible java process(es) to attatch:

1633
2440 org.jetbrains.idea.maven.server.RemoteMavenServer
hengyunabc commented 3 years ago

简单删掉了一个判断,貌似可以工作了。 arthas-boot.jar 目前也是支持的。