栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

运行jmap无法打开套接字文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

运行jmap无法打开套接字文件

jmap
vs.
jmap -F
以及
jstack
vs.
jstack -F
使用完全不同的机制与目标JVM通信。

jmap / jstack

在没有

-F
这些工具的情况下运行时,请使用动态附加机制。其工作原理如下。

  1. 连接到Java进程1234之前,请在目标进程的工作目录或处

    jmap
    创建一个文件。
    .attach_pid1234``/tmp

  2. 然后

    jmap
    发送
    SIGQUIT
    到目标进程。当JVM捕获信号并找到时
    .attach_pid1234
    ,它将启动
    AttachListener
    线程。

  3. AttachListener
    线程创建UNIX域套接字
    /tmp/.java_pid1234
    以侦听来自外部工具的命令。

  4. 出于安全原因,当

    jmap
    接受(来自)连接时,JVM会验证套接字对等方的凭据
    euid
    egid
    JVM进程的凭据相同。这就是为什么
    jmap
    如果由其他用户(甚至由root用户)运行将无法正常工作的原因。

  5. jmap
    连接到套接字,并发送
    dumpheap
    命令。

  6. 该命令由

    AttachListener
    JVM 的线程读取和执行。所有输出都发送回插座。由于堆转储是由JVM直接在进程内进行的,因此操作速度非常快。但是,JVM只能在安全点执行此操作。如果无法达到安全点(例如,进程挂起,未响应或正在进行长时间的GC),
    jmap
    将超时并失败。

让我们总结一下动态附加的优点和缺点。

优点

  • 堆转储和其他操作由JVM以最快的速度协同运行。
  • 您可以使用任何版本的
    jmap
    jstack
    连接到任何其他版本的JVM。

缺点

  • 该工具应由与目标JVM 相同的用户(
    euid
    /
    egid
    )运行。
  • 只能在实时且健康的JVM上使用。
  • 如果目标JVM以开头,则将无法工作
    -XX:+DisableAttachMechanism

jmap -F / jstack -F

使用

-F
工具运行时,切换到具有HotSpot Serviceability
Agent的
特殊模式。在这种模式下,目标进程被冻结;这些工具通过操作系统调试工具(即
ptrace
在Linux上)读取其内存。

  1. jmap -F``PTRACE_ATTACH
    在目标JVM上调用。响应
    SIGSTOP
    信号无条件地暂停目标进程。

  2. 该工具使用读取JVM内存

    PTRACE_PEEKDATA
    ptrace
    一次只能读取一个单词,因此读取目标进程的大堆需要太多调用。这非常非常慢。

  3. 该工具基于特定JVM版本的知识来重建JVM内部结构。由于不同版本的JVM具有不同的内存布局,因此

    -F
    只有
    jmap
    在与目标Java进程来自同一JDK的情况下,模式才有效。

  4. 该工具会自己创建堆转储,然后恢复目标进程。

优点

  • 不需要目标JVM的合作。即使在挂起的进程中也可以使用。
  • ptrace
    只要操作系统级别的权限足够,就可以使用。例如,
    root
    可以转储所有其他用户的进程。

缺点

  • 大堆非常慢。
  • 该工具和目标进程应来自相同版本的JDK。
  • 当工具以强制模式连接时,不能保证安全点。尽管
    jmap
    尝试处理所有特殊情况,但有时目标JVM可能不会处于一致状态。

注意

有一种更快的方法可以在强制模式下进行堆转储。首先,使用创建一个核心转储

gcore
,然后
jmap
在生成的核心文件上运行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号