zoukankan      html  css  js  c++  java
  • docker容器中进行Threaddump查看jvm状态

    前言

    在执行性能测试时需要导出Threaddump,程序运行在Docker容器中,在容器外不能直接使用jcmd 命令和jstack命令进行dump操作,会提示没有该命令,执行yum安装也不行。

    解决办法:

    查看正在运行的容器id
    执行命令:docker ps

    查到的docker容器id如下

    使用docker exec进入Docker容器,命令如下:
    docker exec -it 29198c060396 /bin/sh


    运行jps,已经能看到刚才启动的spring boot应用了

    这时就可以使用jstat,jmap等根据进程id查看程序状态了,以下是我运行jstack查看的堆栈信息


    导出jmap dump的文件,进一步分析,copy docker中的文件到宿主机,命令如下
    docker cp 29198c060396:/logs/d.20170726.txt .

    d.20170726.txt 是我刚才用jmap -dump生成的文件

    29198c060396是docker 容器id

    在Docker中执行jstack时提示No such process,如下图:

    原因分析:

    docker中不能直接使用宿主机上的进程ID

    解决方法:

    docker container内进程信息,与宿主机上进程信息的映射关系,可以使用docker top查看宿主机与Docker中进程的对应关系,具体操作如下:

    1. 找到容器的id

    docker ps

    2. 找到容器在宿主机上映射后的进程信息

    docker top 9b40a74ceb82(容器id)

    就会得到类似下面的信息,其中PID是容器内进程在宿主机上的pid,ppid是容器内进程在宿主机上的父进程pid

    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                9849                1611                0                   Mar07               ?                   00:00:00            bash /usr/bin/start

    找到对应的容器内PID后就可以使用JStack进行Thread dump操作


    参考资料:

    https://blog.csdn.net/longxing_123/article/details/76163980

    https://blog.csdn.net/micklf/article/details/79563869

  • 相关阅读:
    Python 企业面试题集锦之Python基础
    Jmeter 线程之间传递参数
    Jmeter 5.1参数化csv引入文件
    Jmeter 5.1命令行执行bat文件
    Idea JAVA項目的导入JAR包和导出jar包
    charles 设置弱网测试
    Jmeter_Beanshell 返回值中提取参数值
    在Notepad++里配置python环境
    python json格式参数遍历所有key、value 及替换key对于的value
    python 使用yaml模块
  • 原文地址:https://www.cnblogs.com/wx170119/p/12445396.html
Copyright © 2011-2022 走看看