docker线上服务器cpu100%的处理经历

简介: docker线上服务器cpu100%的处理经历

前两天上线一个springboot服务(docker容器部署),服务启动成功后,cpu负载瞬间上来直接100%。这样的表现显然是程序某个地方有问题。

1.第一反应就是某个地方的逻辑形成了死循环。当时通过shell命令

top
复制代码

显示

image.png

可以得到的信息是pid是340,但是有一个疑问就是无法确定对应的是哪个docker容器启动的服务。

2.通过docker命令

docker stats
复制代码

打印出每一个容器对应的指标参数。类似下面这种:

image.png

那么通过以上两个命令,就可以定位到底是哪个docker容器所承载的服务导致了cpu负载100%了。

既然已经定位到了具体哪个服务导致的问题,那么下一步就要定位具体是哪个线程导致的问题?

3.通过shell命令打印进程下所有线程的占用情况

top -H -p340
复制代码

其中340就是第一步获得的pid--->340

类似下面这种:

image.png


查看cpu那一列,找到异常数据为100%的那一行,并记录。

4.通过docker命令

docker exec -it {容器id} /bin/bash
复制代码

进入容器内部。因为是tomcat容器,也就意味着安装了JDK,那么可以使用jvm命令。

通过

jps
复制代码

查看容器内正在运行的java服务。一般是只有一个服务:

image.png

一般在docker配置中没有指定pid和宿主机一致的话,打出来的都是该实例内Bootstrap进程号为1.可查看docker-compose配置

image.png

那么咱们就可以直接通过以下命令打印线程堆栈

jstack -l 1 > pid.dump
复制代码

1就是指的当前运行java服务的pid。

5.把以上pid.dump下载到本地,通过文本工具打开,结合【第三步】获取的信息,结果定位到具体的线程堆栈:

image.png

(实际上【第三步】可以明确是“pool-4-thread-3”这个线程导致cpu负载100%)

看以上截图可知,问题出在TagHeartbeatCheckThread这个类的第55行。

6.根据提示,查看代码:

image.png

RfidDataCache这个是一个本地缓存,如果本地缓存为空,那么便会导致死循环。问题定位已经完成。

7.根据上面一系列的操作及问题定位,已经可以定位到问题产生的具体原因。想要解决这个问题,可以在判断本地缓存为空的时候,让线程睡眠2秒,降低cpu的负载;或者使用阻塞队列的方式,让线程等待直至本地缓存数据不为空。


相关文章
|
13天前
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
176 78
|
2月前
|
存储 Linux Docker
docker在欧拉服务器上编译安装应该注意什么?如何操作?
【10月更文挑战第31天】docker在欧拉服务器上编译安装应该注意什么?如何操作?
104 2
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
147 7
|
1月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
933 2
|
3月前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
700 3
|
3月前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
281 1
|
5天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
177 84
|
15天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
|
14天前
|
存储 运维 安全
阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。

热门文章

最新文章