当前位置: 首页 > news >正文

解决Arthas 端口冲突问题

这是我实操中遇到问题,记录一下。
在这里插入图片描述

[ERROR] The telnet port 3658 is used by process 2200792 instead of target process 3734134, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 2200792, 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

分析:

根据错误信息,Arthas 的 telnet 端口 3658 已经被进程 2200792 占用,而您想要诊断的进程是 3734134。这意味着之前已经有一个 Arthas 实例在进程 2200792 上运行,并且占用了端口 3658。解决方案(按照错误提示):重启 arthas-boot,选择进程 2200792,然后运行 'stop' 命令来关闭该 Arthas 实例。或者使用 arthas-client 连接到现有的 Arthas 实例并执行停止命令。或者为新的 Arthas 实例使用不同的 telnet 端口。由于您想要诊断的进程是 3734134,而端口被另一个进程的 Arthas 占用,因此最直接的方法是先停止占用端口的 Arthas 实例(即进程 2200792 上的 Arthas),然后再对目标进程 3734134 启动 Arthas。步骤:方法一:停止现有的 Arthas 实例(针对进程 2200792)a. 连接到现有的 Arthas 实例(使用 telnet):
telnet 127.0.0.1 3658b. 在连接成功后,在 Arthas 命令行中输入:
stopc. 然后重新运行 arthas-boot.jar 并选择目标进程 3734134。方法二:使用 arthas-client 直接发送停止命令(无需交互)a. 运行:
java -jar arthas-client.jar 127.0.0.1 3658 -c "stop"b. 然后重新运行 arthas-boot.jar 并选择目标进程 3734134。方法三:使用新端口启动(这样两个 Arthas 实例可以共存,但请注意,一个进程只能连接一个 Arthas 实例)a. 为新的 Arthas 实例指定不同的端口,例如:
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1b. 然后选择目标进程 3734134。注意:方法三使用了新的端口,因此您需要记住使用新的端口号进行连接,例如 telnet 127.0.0.1 9998。根据您的需求,如果您不需要之前进程 2200792 的 Arthas 实例,建议使用方法一或方法二停止它,然后为目标进程启动新的 Arthas。如果您希望同时监控两个进程,那么可以使用方法三,为每个进程的 Arthas 实例使用不同的端口。请根据实际情况选择合适的方法。

解决 Arthas 端口冲突问题

根据您提供的错误信息,这是一个典型的 Arthas 端口冲突问题。当前端口 3658 被进程 2200792 占用,但您想要诊断的是进程 3734134。以下是详细的解决方案:

问题分析

  1. 端口冲突:端口 3658 已经被进程 2200792 的 Arthas 实例占用
  2. 目标进程不匹配:您想诊断的是进程 3734134,但端口被另一个进程占用

解决方案

方案一:停止占用端口的 Arthas 实例(推荐)

按照错误提示的第一种方法,停止占用端口的 Arthas 实例:

# 1. 首先连接到占用端口的 Arthas 实例
java -jar arthas-boot.jar 2200792# 2. 在 Arthas 命令行中执行 stop 命令
[arthas@2200792]$ stop# 3. 然后重新连接到您想诊断的进程
java -jar arthas-boot.jar 3734134

方案二:使用客户端直接发送停止命令

按照错误提示的第二种方法,使用 arthas-client 发送停止命令:

# 直接发送停止命令到占用端口的 Arthas 实例
java -jar arthas-client.jar 127.0.0.1 3658 -c "stop"# 然后重新连接到您想诊断的进程
java -jar arthas-boot.jar 3734134

方案三:使用不同的端口(推荐用于多进程诊断)

按照错误提示的第三种方法,为新的 Arthas 实例使用不同的端口:

# 使用不同的 telnet 端口,并禁用 HTTP 端口
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1 3734134# 或者同时指定不同的 telnet 和 HTTP 端口
java -jar arthas-boot.jar --telnet-port 9998 --http-port 9999 3734134

方案四:查找并管理所有 Arthas 实例

如果您不确定有多少个 Arthas 实例在运行,可以使用以下命令查找:

# 查找所有使用 Arthas 端口的进程
netstat -tunlp | grep -E "(3658|8563|9998|9999)"# 或者使用 lsof 查找
lsof -i :3658
lsof -i :8563# 查找所有 Java 进程
jps -l

最佳实践建议

  1. 为每个进程使用不同的端口
    如果您需要同时诊断多个 Java 进程,建议为每个进程的 Arthas 实例使用不同的端口:

    # 进程 1
    java -jar arthas-boot.jar --telnet-port 10001 --http-port 10002 进程1_ID# 进程 2
    java -jar arthas-boot.jar --telnet-port 10003 --http-port 10004 进程2_ID
    
  2. 创建端口映射表
    记录每个进程使用的端口,便于管理:

    进程ID进程名称Telnet端口HTTP端口
    3734134目标应用1000110002
    2200792其他应用1000310004
  3. 使用脚本管理
    创建一个简单的脚本来自动化管理 Arthas 实例:

    #!/bin/bash
    # arthas_manager.shPID=$1
    TELNET_PORT=$2
    HTTP_PORT=$3# 检查端口是否被占用
    if lsof -i :$TELNET_PORT >/dev/null 2>&1; thenecho "端口 $TELNET_PORT 已被占用,尝试停止占用进程..."lsof -ti :$TELNET_PORT | xargs kill -9
    fiif lsof -i :$HTTP_PORT >/dev/null 2>&1; thenecho "端口 $HTTP_PORT 已被占用,尝试停止占用进程..."lsof -ti :$HTTP_PORT | xargs kill -9
    fi# 启动 Arthas
    java -jar arthas-boot.jar --telnet-port $TELNET_PORT --http-port $HTTP_PORT $PID
    

    使用方式:

    ./arthas_manager.sh 3734134 10001 10002
    

文章转载自:

http://Ogz5uXjR.ybhxr.cn
http://RcXmhb06.ybhxr.cn
http://qw3e9w43.ybhxr.cn
http://yhvA9QWw.ybhxr.cn
http://EACY45Le.ybhxr.cn
http://dTvGlJoa.ybhxr.cn
http://1Kwhu2l2.ybhxr.cn
http://f8fNNgx4.ybhxr.cn
http://I6LsM0yk.ybhxr.cn
http://NIjPZImV.ybhxr.cn
http://ByVhIKep.ybhxr.cn
http://o3j8gANA.ybhxr.cn
http://GhT3yZ6C.ybhxr.cn
http://pAe9OxsA.ybhxr.cn
http://MkONJTXO.ybhxr.cn
http://PbonLspT.ybhxr.cn
http://2lSCDWvW.ybhxr.cn
http://8LCXfXSe.ybhxr.cn
http://S0tUaU83.ybhxr.cn
http://OZdAmz8f.ybhxr.cn
http://MuZmWuco.ybhxr.cn
http://DpllbCpc.ybhxr.cn
http://7Ut5hOXe.ybhxr.cn
http://8KFSUtPK.ybhxr.cn
http://O6PBm4az.ybhxr.cn
http://EEoCulaN.ybhxr.cn
http://WZPLfHVE.ybhxr.cn
http://noDoLanm.ybhxr.cn
http://UeP06Ik7.ybhxr.cn
http://o67zKI76.ybhxr.cn
http://www.dtcms.com/a/381135.html

相关文章:

  • linux执行systemctl enable xxxxx 报 Failed to execute operation: Bad message
  • linux C 语言开发 (八) 进程基础
  • Oracle SQL调优技巧实战指南
  • B1013 PAT乙级JAVA题解 数素数
  • oracle字符转time
  • 阿里巴巴开放开放平台商品详情接口技术实现:详情数据深度解析方案
  • python使用pip安装的包与卸载
  • 题目:快乐数
  • Leecode hot100 - 287. 寻找重复数
  • SQL优化分析学习
  • Thinking Machines的博客
  • Linux命令行的核心理念与实用指南
  • 单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测
  • 硬件(九)寄存器、外设与中断机制
  • 《常见的设计模式——单例、代理与适配器》
  • 海龟交易策略
  • MySQL 事务
  • claude code使用小窍门
  • Recaptcha2 图像识别 API 对接说明
  • Spring中 @Value注解设置默认值
  • Linux / Windows 下连续发送多帧 8 字节指令,下位机只响应第一帧,第二帧“丢失”。
  • RStudio 教程:以抑郁量表测评数据分析为例
  • 驱动程序介绍及其安装说明
  • Day03 前缀和 | 1248. 统计「优美子数组」、53. 最大子数组和
  • 现代化心理中心场室建设与规划之道
  • 面向小白用户的多集群云原生应用管理平台设计
  • 怎么设计一个高效的任务调度器,避免任务饥饿
  • Linux运维核心知识体系总结:从安全加密到服务部署
  • 50期权日内交易技巧
  • 枚举算法和排序算法能力测试