启动 arthas 进程报错

问题 1 启动 arthas 进程报错

[ERROR] The telnet port 3658 is used by process 708 instead of target process 16449, you will connect to an unexpected process.

[ERROR] 1. Try to restart arthas-boot, select process 708, shutdown it first with running the 'stop' command.

[ERROR] 2. Or try to stop the existing arthas instance: java -jar arthas-client.jar 127.0.0.1 3658 -c "stop"

[ERROR] 3. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

image

启动一个 arthas 进程默认会占用 3658 端口,之前你已经通过进程 708 创建了 arthas 进程,占用了 3658 端口,这个时候你又想要通过一个别的进程 16449 来创建 arthas 进程,去占用 3658 端口,就会有这个报错提示。

image
我们可以看到 3658 端口确实被 708 进程占用了。

然后,它提示你可以选择之前的 708 进程,用「stop」命令停掉它创建的 arthas 进程,再去新启一个 arthas 进程。

或者通过命令「 java -jar arthas-client.jar 127.0.0.1 3658 -c "stop"」将之前的 arthas 进程停掉。

如果你不想停掉之前的 arthas 进程,它建议你用「java -jar arthas-boot.jar --telnet-port 9998 --http-port -1」创建 arthas 进程,去占用 9998 端口,而非默认的 3658 端口。HTTP 端口的值为 -1,表示禁用了 HTTP 端口,这意味着你无法通过 HTTP 协议直接访问 arthas 工具的 web 界面。

顺带提下,退出 arthas 进程的几种方式:

第一种,quit 或者 exit,退出当前 arthas 客户端,但进程并不会被杀掉。
第二种,shutdown 或者 stop,退出当前 arthas 客户端,进程会被杀掉,下次使用需要重新 attach。

另外,你可能想通过命令「java -jar arthas-boot.jar --telnet-port 9998 --http-port -1」 去指定端口号,但你又怕跟别人冲突,可以使用「 netstat -anpt | grep LISTEN | grep pid」获取到目标 pid 所有监听的端口,arthas 监听的 ip 是 127.0.0.1,而不是 0.0.0.0,找到后切换别的端口即可。
image

当你启动 arthas 报错,没有头绪的时候,你可以「less ~/logs/arthas/arthas.log」看下报错的原因。

posted @ 2023-12-10 17:12  ZERO_FAITH  阅读(1214)  评论(0编辑  收藏  举报