排查Docker容器Java程序CPU过高问题以及处理方法

这篇具有很好参考价值的文章主要介绍了排查Docker容器Java程序CPU过高问题以及处理方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因为Docker里java程序运行环境是用的jre,没有top和jstack命令,所以要在容器里安装top和jattach,来查看和导出线程信息。

系统:Debian10

镜像:openjdk:8u275-jre-slim-buster

容器ID:99abe55a98dc


一.安装top:

    1.进入容器:
 

docker exec -it 99abe55a98dc /bin/bash

    2.因为官方镜像地址太慢,所以修改源地址:https://developer.aliyun.com/mirror/
    点击Debian,进入https://developer.aliyun.com/mirror/debian?spm=a2c6h.13651102.0.0.3e221b11I0yNcy
  选择Debian10配置的配置,>指令覆盖文件原内容并重新输入内容,若文件不存在则创建文件 >>指令代表追加 ,xshell直接一起执行,有的可能会报tmp文件夹没有执行权限,chmod 777即可

    echo "deb https://mirrors.aliyun.com/debian/ buster main non-free contrib" > /etc/apt/sources.list
    echo "deb-src https://mirrors.aliyun.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list
    echo "deb https://mirrors.aliyun.com/debian-security buster/updates main" >> /etc/apt/sources.list
    echo "deb-src https://mirrors.aliyun.com/debian-security buster/updates main" >> /etc/apt/sources.list
    echo "deb https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list
    echo "deb-src https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list
    echo "deb https://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list
    echo "deb-src https://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list

    3.更新源
    

apt-get update

    4.安装
  

 apt-get install procps

    5.查看java进程里面占用资源最多的线程(docker中java程序pid一般是1,也可能是其他,和Dockerfile里的ENTRYPOINT启动方式有关,可以top先看一下COMMAND列是java的行)
  

  top -Hp 1

    6.上述命令得到高的线程,比如是8,转pid为十六进制,为查找文件使用
  

  printf "%x\n" 8


二.安装jattach,详情访问:GitHub - jattach/jattach: JVM Dynamic Attach utility

    通过动态附加机制向JVM进程发送命令的实用程序。一体机jmap + jstack + jcmd + jinfo功能在一个单一的小程序。不需要安装JDK,只使用JRE。支持Linux容器。

    1.下载jattach
    https://github.com/apangin/jattach/releases
    放到服务器上,比如:/usr/local

    2.复制jattach到容器内部
 

 docker cp /usr/local/jattach 99abe55a98dc:/usr/bin

    3.进入容器
    

docker exec -it 99abe55a98dc /bin/bash

    4.进入容器,将jattach改为可执行状态
    

chmod +x /usr/bin/jattach

    5.把线程详情导出到文件里查看
 

   jattach 1 threaddump > /opt/threaddump.hprof

    6.在文件查找某个线程信息,比如0x8
  

 grep -20  --color=auto 0x8 /opt/threaddump.hprof 


    
    7.也可以退出容器后,执行命令,导出到容器外看
  

 docker cp 99abe55a98dc:/opt/threaddump.hprof /usr/local


    
    
    


 文章来源地址https://www.toymoban.com/news/detail-503213.html

到了这里,关于排查Docker容器Java程序CPU过高问题以及处理方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】 服务器cpu过高如何排查和解决?

    对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:例如接口

    2024年02月11日
    浏览(52)
  • [Docker Java 服务]Docker 容器中Java服务问题排查

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 安装 参考官方文档:

    2024年02月09日
    浏览(40)
  • Java CPU或内存使用率过高问题定位教程

    Spring cloud微服务广泛应用后,服务的监控和运维压力也与日俱增,经常有服务出现CPU或者内存使用率过高的告警,那么遇到这样的问题我们该如何排查呢?我们可以借助哪些工具来定位问题呢?本文将介绍一下遇到此类问题的解决思路和方法。 1.通过应用日志定位思路 对于业

    2024年03月28日
    浏览(57)
  • Linux服务器CPU使用率过高排查与解决思路

    日常工作中有时候会遇到Linux服务器上出现CPU负载过高的情况,影响程序的运行,一般的排除思路如下: 然后按shift+p按照CPU排序,找到占用CPU过高的进程的pid 找到进程中消耗资源最高的线程的id 将需要的线程ID转换为16进制格式 bc是linux的计算器命令 查看线程状态信息 grep

    2024年01月21日
    浏览(49)
  • Java线上服务CPU、内存飙升问题排查步骤!

    作为一名从事Java开发快一年的程序员,在线上经常碰到 某个模块的Pod发出CPU与内存告警的问题 ,而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过 重启 或者 调高Pod的资源量或者增加Pod数量 暂时解决问题,但这是治标不治本的,只有找到问题发生的原

    2024年02月16日
    浏览(46)
  • Java线上CPU内存冲高问题排查步骤

    作为一名从事Java开发快一年的程序员,在线上经常碰到 某个模块的Pod发出CPU与内存告警的问题 ,而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过 重启 或者 调高Pod的资源量或者增加Pod数量 暂时解决问题,但这是治标不治本的,只有找到问题发生的原

    2024年02月07日
    浏览(44)
  • ubuntu 如何在docker容器内部查看允许使用的cpu详细信息以及管理员是否限制了docker容器可使用的cpu核心范围

    如题。最近在跑强化学习代码,发现自己的代码跑的好慢好慢好慢,怀疑是可使用的cpu数量被管理员限制了,于是去学习了一下如何查看docker容器中cpu的相关信息。 这将输出关于系统处理器的详细信息,包括每个 CPU 的数量、型号和速度。 在 Docker 容器中,默认情况下,可以

    2024年02月13日
    浏览(48)
  • docker ps 容器未显示的问题及排查过程

    本文直接引用工作中生产环境遇到的问题做记录,下方图片均为真实机器返回结果集 问题: docker ps || docker ps -a || docker images 均没有显示容器和镜像 原因:在k8s配置的镜像仓库docker-repositry机器里,启动并运行部分数据库、消息队列等容器,因网络波动影响服务器操作。故对

    2024年02月11日
    浏览(52)
  • Docker容器cpu利用率问题

    1.top原理 top 是读的/proc/stat文件 比如cat /proc/PID/stat 进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间 某一进程Cpu使用率的计算 计算方法:       1  采样两个足够短的时间间隔的cpu快照与进程快照,             a每一个cpu快照均为(user、

    2023年04月26日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包