前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 容器内分析 java程序占用 cpu 高问题排查分析

Docker 容器内分析 java程序占用 cpu 高问题排查分析

作者头像
张琳兮
发布2022-01-12 10:21:16
2.9K0
发布2022-01-12 10:21:16
举报
文章被收录于专栏:首富手记首富手记
代码语言:javascript
复制
作者: 张首富
时间:2021-07-08

背景描述

我们目前所有的 java 服务都是封装在 docker 里面的,今天做压力容量测试的时候发现有个服务占用cpu 300%,想找到是这个 java 程序的那个线程造成的问题,把问题反馈给开发让他们去修复。

下面所使用的容器镜像都是通过:Docker容器内执行 jvm 分析工具命令 文章内的打包方式构建的;如果你发现你的 jvm 参数不能使用,那么建议你参考我的 dockerfile 进行构建

分析过程

通过监控发现 A 服务占用 cpu 过高;(prometheus+grafana+cadvisor构建的监控)

image-20210708143717398
image-20210708143717398

等到宿主机上使用 top 判断是否真的是这个容器造成的 CPU 高

代码语言:javascript
复制
top
进入交互模式 按键盘 c 是按照 CPU 使用率进行排序

确定是此服务没有跑了。那么开始分析是这个进程的那些线程出现的问题;因为我们服务都是封装在容器里,namespaces 和属主机上是隔离的,所以我们到容器里面去分析

代码语言:javascript
复制
docker exec -it A sh
apk add openjdk8  //安装 jvm 分析工具
apk add htop      // 安装 htop 我们能更加清楚的看到是哪个线程占用 cpu 高,不需要借助其他命令;

进到 docker 容器内执行命令htop 进去到 htop 页面按shift+p按照 CPU 使用率排序。

image-20210708154354189
image-20210708154354189

找到 cpu 使用率前几的线程号。记录下来

使用dk自带命令jstack获取此时的线程快照并输入到文件中: jstack -l > ./jstack_result.txt 命令(为Java进程的id号)来获取线程快照结果并输入到指定文件。

代码语言:javascript
复制
jstack -l 7 > 1.txt 

使用 printf "%x\n" 命令(tid指线程的id号)将以上10进制的线程号转换为16进制:

代码语言:javascript
复制
/home/work # printf "%x\n" 162
a2
/home/work # printf "%x\n" 163
a3
/home/work # printf "%x\n" 169
a9
/home/work # printf "%x\n" 164
a4

转换后的结果分别为a2,a3,由于16进制以0x开头,所以对应的16进制的线程号为0xa2和0xa3。

我们在刚才生成的线程快照中找 nid=0xa2,nid=0xa3 的线程

image-20210708154738051
image-20210708154738051

然后把这些提供给开发让开发去查看代码。

到此 docker 容器内分析 java cpu 使用率高的问题排查完成,

补充

在属主机上可以使用 top -Hp PID 来找线程使用 cpu 占用高的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景描述
  • 分析过程
  • 补充
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档