linux下cpu飙高原因排查过程详解
目录
- 前言
- 开始
- 步骤
- 排查
前言
cpu飙高是很常见的线上问题,这都不会的话,属实有点拉跨
兄弟萌不用慌,来我教你一套连招
开始
先来个项目,整个api,到时候我们请求/cpu/{count}就能手动拉高cpu,机智鬼~
@GetMapping("/cpu/{count}") public long cpuTest(@PathVariable("count") long count) { long number = 0; for (int i = 0; i < count; i++) { number++; } return number; }
打包、上传、启动
跑起来了,记住这个进程号 14849
我们先top看看正常情况下的cpu使用率
很合理
模拟线上cpu飙高
我们请求/cpu/{100000000000}接口,把cpu拉起来,同时top观察cpu使用率
直接干到98%,很nice
ok入戏,我们现在线上出问题了,cpu一直很高,老大叫你找找原因,开始支棱起来
其实我们现在已经知道是谁把cpu拉高了,但还不够细,只知道哪个项目出的问题远远不够,我们应该找到罪魁祸首,到底是哪个方法的多少行导致的问题,这才能让老大直呼内行
步骤
jps+top 定位应用进程
pidtop -Hp {pid}找到线程tid
将 tid 转换成十六进制 printf “%x\n” {tid}
打印堆栈信息 jstack
过滤出我们想要的
排查
进程id已经确定是 14849,下一步我们要找到是哪个线程搞的鬼
top -Hp 14849
很明显是这个14908搞的鬼
转十六进制
打印堆栈
堆栈信息显示是TestController里面的第20行出的幺蛾子,我们进入代码验证
问题不大
破案
撒花
到此这篇关于linux下cpu飙高原因排查过程详解的文章就介绍到这了,更多相关linux cpu飙高原因排查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Linux系统中CPU占用率较高问题排查思路与解决方法
前言 作为 Linux 运维工程师,在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行,带来企业损失. 很多运维的同学遇到这种状况往往会不知所措,对于CPU过载问题通常使用以下两种方式即可快速定位: 方法一 第一步:使用 top命令,然后按shift+p按照CPU排序 找到占用CPU过高的进程的pid 第二步:使用 top -H -p [进程id] 找到进程中消耗资源最高的线程的id 第三步:使用 echo 'ob
-
详解Linux CPU负载和CPU使用率
CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait. 平均负载(load average)是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程. 以上分析可以看出,一台机器很有可能处于低cpu使用率高负载的情况,因此看机器的繁忙程度应该结合两者,从实际的使用情况观
-
linux下cpu飙高原因排查过程详解
目录 前言 开始 步骤 排查 前言 cpu飙高是很常见的线上问题,这都不会的话,属实有点拉跨 兄弟萌不用慌,来我教你一套连招 开始 先来个项目,整个api,到时候我们请求/cpu/{count}就能手动拉高cpu,机智鬼~ @GetMapping("/cpu/{count}") public long cpuTest(@PathVariable("count") long count) { long number = 0; for (int i = 0; i <
-
Linux 下FTP的安装与配置教程详解
0.安装ftp的前置条件是关掉SElinux # vi /etc/selinux/config 修改 SELINUX=" disabled " ,重启服务器.若相同,则跳过此步骤. 1. 可先查看是否安装过vsftp # rpm -qa | grep vsftpd 则代表已经安装.可直接跳过步骤2 2 .安装 vsftp # yum install vsftp* Is this ok [y/N]: y 代表安装完成. 3. 对vsftp 进行配置 # /etc/vsftpd/vsftp
-
LInux下安装MySQL5.6 X64版本步骤详解
环境: 1.CentOS6.5 X64 2.mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 3.下载地址:http://dev.mysql.com/downloads/mysql/ 安装步骤 1.再安装包的存放目录下执行命令解压文件 tar -zxvf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz -C /opt/ 2.删除安装包,重命名解压后的文件 rm -rf mysql-5.6.34-linux-glibc2.5-x
-
linux下安装Nginx1.16.0的教程详解
因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版. 服务器环境为centos,接下来是详细步骤: 安装必要依赖插件 yum install -y gcc gcc-c++ pcre \ pcre-devel zlib zlib-devel openssl openssl-devel wget 创建文件夹并切换过去 mkdir /customer && cd /customer 下载安装包 (同样如果想安装其他的版本
-
Linux下sshd服务及服务管理命令详解
sshd SSH为Secure Shell的缩写,是应用层的安全协议.SSH是目前较可靠,专为远程登陆会话和其他网络服务提供安全性的协议.利用SSH协议可以有效防止远程管理过程中的信息泄露问题. openssh-server 功能:让远程主机可以通过网络访问sshd服务,开始一个安全shell 客户端连接方式 ssh 远程主机用户@远程主机ip 先rm -rf /root/.ssh/清掉之前的配置 ssh 远程主机用户@远程主机ip -X 调用远程主机图形工具 ssh 远程主机用户@远程主机ip
-
Linux下的crontab定时执行任务命令详解
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. 一.cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service crond start //启动服务 service crond stop //
-
Linux下安装mysql-8.0.20的教程详解
** Linux下安装mysql-8.0.20 ** 环境介绍 操作系统:CentOS 7 mysql下载地址:https://dev.mysql.com/downloads/mysql/ 下载版本:https://www.jb51.net/softs/609101.html https://www.jb51.net/softs/609101.html 卸载mysql 查看是否安装过mysql,命令:find / -name mysql 如果安装过,进行卸载: 删除相关目录: 删除配置文件: 删
-
Linux下nginx编译安装教程和编译参数详解
一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码 代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl 需要ssl的支持,如果不需要ssl支持,请跳过这一步 复制代码 代码如下: # yum install openssl* 3.gzip 类库安装 复制代码 代码如下: yum install zlib zlib-devel 4.安装wget 下载nginx使用,如果已经安装,跳过这一步 复制代码
-
linux上nginx安装部署及使用过程详解
1.下载 官网下载地址 2.部署 2.1安装前提 在linux下安装需要安装一下组件 1. gcc && g++ yum install gcc-c++ 2. pcre yum install -y pcre pcre-devel 3. zlib yum install -y zlib zlib-devel 4. openssl yum install -y openssl openssl-devel 2.2 安装 1. 解压nginx文件 tar -zxvf nginx-1.17.5.t
-
LINUX下Oracle数据导入导出的方法详解
本文讲述了LINUX下Oracle数据导入导出的方法.分享给大家供大家参考,具体如下: 一. 导出工具 exp 1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移 它有三种模式: a. 用户模式: 导出用户所有对象以及对象中的数据: b. 表模式: 导出用户所有表或者指定的表: c. 整个数据库: 导出数据库中所有对象. 2. 导出工具exp交互式命令行方式的使用的例子: $ex
随机推荐
- jQuery事件绑定.on()简要概述及应用
- js数组如何添加json数据及js数组与json的区别
- WIN2003服务器安全配置终极技巧第1/6页
- Python使用time模块实现指定时间触发器示例
- asp.net 细说文件读写操作(读写锁)
- VMware中ubuntu虚拟机与windows的端口映射共享一个IP地址的设置教程(图文教程)
- JavaScript获取ul中li个数的方法
- 浅谈PHP中其他类型转化为Bool类型
- 使用php的HTTP请求的库Requests实现美女图片墙
- DBTree 1.3.2
- js继承实现方法详解
- asp.net中c#自定义事件的实现方法详解
- js图片自动切换效果处理代码
- 使用简洁的jQuery方法实现隔行换色功能
- jQuery html表格排序插件tablesorter使用方法详解
- jQuery超酷平面式时钟效果代码分享
- 一段代码搞懂关于Java中List、Set集合及Map的使用
- C#异步调用的好处和方法分享
- 基于chosen插件实现人员选择树搜索自动筛选功能
- Django rest framework基本介绍与代码示例