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的负载;或者使用阻塞队列的方式,让线程等待直至本地缓存数据不为空。


相关文章
|
6天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
45 5
|
1月前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
141 18
|
2月前
|
关系型数据库 MySQL Java
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
这篇文章介绍了在腾讯云服务器上使用Docker安装常见软件的过程,包括安装MySQL、Redis和Tomcat,并提供了解决连接问题的方法。同时,还涉及了服务器中安装JDK 1.8的步骤和如何将项目打包部署到服务器上的指导,包括注意事项和操作提示。
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
|
2月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
2月前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
2月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
2月前
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
142 0
|
23天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
21天前
|
编解码 前端开发 安全
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
在我们选购阿里云服务器的过程中,不管是新用户还是老用户通常都是通过阿里云的活动去买了,一是价格更加实惠,二是活动中的云服务器配置比较丰富,足可以满足大部分用户的需求,但是面对琳琅满目的云服务器实例、带宽和云盘选项,如何选择更适合自己,成为许多用户比较关注的问题。本文将介绍如何在阿里云的活动中选择合适的云服务器实例、带宽和云盘,以供参考和选择。
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
|
20天前
|
弹性计算 运维 安全
阿里云轻量应用服务器和经济型e实例区别及选择参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽价格为82元1年,2核2G3M带宽的经济型e实例云服务器价格99元1年,对于云服务器配置和性能要求不是很高的阿里云用户来说,这两款服务器配置和价格都差不多,阿里云轻量应用服务器和ECS云服务器让用户二选一,很多用户不清楚如何选择,本文来说说轻量应用服务器和经济型e实例的区别及选择参考。
阿里云轻量应用服务器和经济型e实例区别及选择参考
下一篇
无影云桌面