记一次SpringBoot服务CPU过高排查

今天到公司后,测试报告说页面操作时报网络异常,让我排查一下。 我先去服务上使用

1ps -ef | grep <服务名>

查看了一下,发现服务是存在的,然后服务调不通超时可能是服务没响应,资源不够。于是使用top 命令查询

1top 5705

键盘输入shift + m根据内存使用率降序排序,发现占用率10%左右,似乎没啥问题,然后输入shift + p根据CPU使用率降序排序查询如下。 在这里插入图片描述 居然CPU高达180%,于是赶紧查看下哪个线程使用率较高

1top -H -p 5705

在这里插入图片描述 这里看到有两个线程在84%左右,大概就是这两个线程导致的。将十进制的线程编号转换为十六进制备用:

1printf "0x%x\n" 5709 2printf "0x%x\n" 5710

得到的结果是

10x164d 20x164e

这个时候应该导出线程信息看下,使用命令

1/data/java/bin/jstack -l -F 5705 >> jstack.log

导出线程信息,然后下载文件后搜索 0x164d0x164e,发现是两个GC线程 在这里插入图片描述 应该是内存不够用了,于是看下内存情况,使用以下命令

1/data/java/bin/jmap -dump:format=b,file=jmap.hprof 5705

导出内存快照,然后下载下来,用MAT打开 在这里插入图片描述 查看这几个Problem,发现里面是一个线程池中的多个线程在从A数据库导数据到B数据库,一次Load1万条数据,开的线程较多,内存吃满了。内存已经吃满了肯定没法进行了,于是降低导数据同时执行的线程数,重启服务,重新导数据。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20

Linux 服务器上有挖矿病毒 kdevtmpfsi 如何处理?

症状表现服务器CPU资源使用一直处于100%的状态,通过top命令查看,发现可疑进程kdevtmpfsi。通过google搜索,发现这是挖矿病毒。!(https://cdm.yp14.cn/img/kdevtmpfsitop.png)排查方法首先:查看kdevtmpfsi进程,使用ps

JVM调优之jstack找出最耗cpu的线程并定位代码

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。第一步先找出Java进程ID,服务器上的Java应用名称为mrfcenter:root@u