记一次cpu指标异常的跟踪排查
问题描述:
最近在测试环境的服务器上,无意中发现cpu持续飙高。最高的时候达到了200%经过反复重启无效之后,决定挖掘深层次的原因
通过top命令打印出消耗cpu的pid,如图

通过ps -mp 24597 -o THREAD,tid,time,找出进程中cpu占用率最高的tid

通过 jstack -F tid >> tid.log打印出该进程下的线程信息
在文件中可以看到一行怪异的信息

从线程信息中,可以看到,似乎是这个线程调用某一个dubbo服务的时候,线程阻塞了,持续消耗cpu
排查之后没有结论。。。
-------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------
换一种排查方式。。。
用 vmstat 1 10 命令看一下可能存在的问题
下图中可以发现in和cs值有些异常

in:表示每秒cpu中断的次数
cs:表示每秒产生的 上下文切换数。我们调用函数,就要进行上下文切换;线程间的切换,也要进程上下文切换。
这个值越小越好,太大了,要考虑调低线程或者进程的数目。
我们做大并发测试时,选择web服务器的进程可以从进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值。
另外,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个很耗资源,要尽量避免频繁调用。
上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU不能充分利用和正常工作。
in和cs值越大,表示内核消耗的cpu越多
接下来我们看一下关键进程的上下文切换数
先找出消耗cpu最大的进程
top -Hp 24597
pid =24619

查看一下该进程的上下文切换数
pidstat -p 24619 -w 1 10
- PID:进程id
- Cswch/s:每秒主动任务上下文切换数量
- Nvcswch/s:每秒被动任务上下文切换数量
- Command:命令名
可以看出该进程每秒都在被动的切换上下文,而且数量很大

用pstack查看一下线程日志
似乎是sleep的问题,未完待续。。。。

-------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------
跨度有点久了,现在终于找到了问题根源
通过线程分析工具,打印出了占用cpu最高的方法调用
bash show-busy-java-threads

原来是target目录下dubbo文件的权限有问题,因为该文件不是当期用户权限,所以读取的时候产生了死循环,导致cpu飙高

把这个文件的权限改成当前用户,然后重启一下tomcat。cpu就降下来了
记一次cpu指标异常的跟踪排查的更多相关文章
- CPU利用率异常的分析思路和方法交流探讨
CPU利用率异常的分析思路和方法交流探讨在生产运行当中,经常会遇到CPU利用率异常或者不符合预期的情况,此时,往往暗示着系统性能问题.那么究竟是核心应用的问题?是监控工具的问题?还是系统.硬件.网络层 ...
- NIOS II CPU复位异常的原因及解决方案
NIOS II CPU复位异常的原因及解决方案 近期在用nios ii做项目时,发现一个奇怪的现象,在NIOS II EDS软件中编写好的代码,烧写到芯片中,第一次能够正常运行,但是当我按下板卡上 ...
- mysql进阶(二十)CPU超负荷异常情况
CPU超负荷异常情况 问题 项目部署阶段,提交订单时总是出现cpu超负荷工作情况,导致机器卡死,订单提交失败.通过任务管理器可见下图所示: 通过任务管理器中进程信息(见下图)进行查看,可见正是由于项目 ...
- “全栈2019”Java异常第十三章:访问异常堆栈跟踪信息
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- 记一次Task抛异常,调用线程处理而引发的一些随想
记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题. 1.任务线程在任务线程执行语句上抛出异常. 例如: private ...
- 服务器 CPU 100% 异常排查实践与总结
一个执着于技术的公众号 问题背景 昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续在70%以上,看起来像是硬件资源到瓶颈需要扩容了,但仔细思考就 ...
- kubelet CPU 使用率过高问题排查
kubelet CPU 使用率过高问题排查 问题背景 客户的k8s集群环境,发现所有的worker节点的kubelet进程的CPU使用率长时间占用过高,通过pidstat可以看到CPU使用率高达100 ...
- 解Bug之路-记一次中间件导致的慢SQL排查过程
解Bug之路-记一次中间件导致的慢SQL排查过程 前言 最近发现线上出现一个奇葩的问题,这问题让笔者定位了好长时间,期间排查问题的过程还是挺有意思的,正好博客也好久不更新了,就以此为素材写出了本篇文章 ...
- 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...
随机推荐
- Laravel使用Redis共享Session
一.当系统的访问量上升的时候,使用Redis保存Session可以提高系统的性能,同时也方便多机负载的时候共享Session 打开config/database.php.在redis中增加sessio ...
- centos从零开始安装elasticSearch
前言:elasticSearch作为一款优秀的分布式搜索工具,被广泛用在数据搜集和整理的业务中,知名的比如有github就是采用es来精准的搜索几千万行代码,百度也大量应用es做数据爬取分析,本篇博客 ...
- Xcode11 Developer Tool中没了Application Loader
升级Xcode11之后不少人发现在Open Developer Tool中没了Application Loader. 那么如果我们还想用该怎么办呢? 先这样 找个老版的Xcode–>Conten ...
- golang中uint8字节切片转字符串
假如拿到了一个字节切片test1 = {'a', 'b', 'c', 'd', 11} package main import ( "fmt" "reflect" ...
- Executor的线程代码
package com.open1111; import java.util.concurrent.ExecutorService;import java.util.concurrent.Execut ...
- 关于logging模块
from logging.handlers import TimedRotatingFileHandle #日志文件控制(日志删除时间设置) import logging logger=logging ...
- 使用Kubeadm安装Kubernetes【单Master节点】
参考:Kubernetes官方文档 Kubernetes安装方案选择 Centos 7 配置科学上网 安装Calico网络插件 kubernetes-dashboard部署 Kubernetes ...
- 【转】UItraEdit破解
安装UltraEdit(一路下一步,无难点)成功后,打开软件弹出如下使用模式提示信息. 关掉UltraEdit软件,同时 断本机网络.重新打开UltraEdit软件: 点击[输入许可证密 ...
- Odoo中的模型详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826118.html [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据.类 ...
- Docker 版ansible galera集群
1. 部署galera集群 利用四台主机cicd.node1.node2.node3来搭建galera集群. 1> 上传压缩包至cicd,解压得到ansible配置文件 [root@cicd ~ ...