线上问题处理1---CPU飙高问题定位
线上cpu飙高排查步骤:
- top命令查看进程与CPU的使用情况
- 判断是否GC导致CPU冲高, 主要看GC频率和内存使用情况, 具体命令可参考: jvm常用指令
- 如果不是GC问题, top -Hp PID 查看占用CPU最高的进程的线程情况
- 确定线程后,计算线程ID对应的十六进制值: printf "%x\n" <java_thread_id>
- 将该线程堆栈内容输出: jstack <java_pid> | grep <线程id十六进制值> -A 30 【-A 30表示向下打印30行】, 这时就可以看到业务代码中那一部分使CPU飙高了。这里的信息可以精确到java代码的类、方法、行数:
- 根据第三步的结果, 修改业务逻辑代码
top命令及参数说明:
1、线上CPU使用情况查看: top命令
上图中,我的top命令输出的结果的与你们的输出结果是不是不太一样,我的字体是红色,而且展示了cpu的个数和每个的私用情况, 还有就是内存的使用是一个图形结构。 而你们的top命令截图应该是下面这样的:
这需要记住几个按键和作用:
- 按z可更改top追踪的颜色
- 按1键可查看系统上每个 CPU 内核的图形表示
- m键以图形方式显示内存使用情况
- t 图形的方式显示CPU使用情况
1.1 top参数信息
- up *** days, *** min :说明此服务器连续运行 *** 天 *** 分钟
- *** users : 当前登录用户数
- load average:***, ***, *** : 系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
1.2 Tasks 系统任务
- total:总进程数
- running: 正在执行进程数
- sleeping :正在休眠进程数
- stoped : 暂停进程数
- zombie: 僵尸进程数
1.3 %Cpu 系统CPU使用情况
- us : 系统用户占用比例
- sy: 系统内核占用比例
- ni: 优先级调度占用比例
- id:空闲CPU
- wa: I/O 等待占用比例
- hi:硬件中断占用
- si:软件中断占用
- st:虚拟化占用
1.4 Kib Mem 系统内存使用情况
- total:总内存空间
- free:空闲内存
- used:已用内
- buff/cache:物理内存和交换内存的缓冲区总和。
1.5 Kib Swap 系统交换空间使用情况
- total:总交换空间
- free:空闲交换空间
- used:已用交换空间
- avail Mem:可用物理空间。
1.6 运行进程信息, 也是我们最常使用的数据
- PID: 进程ID
- USER: 进程所有者
- PR: 优先级
- NI: 进程优先级
- VIRT: 虚拟内存
- RES: 实际使用的物理内存
- SHR: 共享内存大小
- S: 进程状态(D=不可中断的睡眠状态,R=运行中或可运行,S=睡眠中,T表示已跟踪以及已停止,Z=僵停
- %CPU: 上次更新到现在的cpu时间占用百分比
- %MEM: 进程使用的物理内存百分比
- TIME+: 进程使用的cpu时间总计
- COMMAND: 命令名/命令行
2. top命令常用参数 :分析具体线程 top -Hp PID
- 1. H:显示线程
- 2. p:根据CPU使用百分比大小进行排序。
使用top -Hp PID 命令后,显示的信息与top 命令有一些不同: 这里没有了Task 而是展示了 Threads, 标识当前进程中总共有多少个线程。
参考文档:
top命令详解
线上问题处理1---CPU飙高问题定位相关推荐
- 简单的cpu飙高问题定位脚本
原文链接: https://blog.csdn.net/manzhizhen/article/details/79333676 老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是 ...
- 线上CPU飙高诊断定位
1. 先准备一段java程序,后台运行 2. 使用 top命令查看cpu的进程使用情况 在这里看到了一个进程占据了99.3%的cpu利用率,这显然是出现了cpu飙升的情况,这会到期系统其他进程得不到c ...
- 你要偷偷学会排查线上 CPU 飙高的问题,然后惊艳所有人!
作者 l Hollis 来源 l Hollis(ID:hollischuang) 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入 ...
- 面试官:线上服务CPU飙高怎么排查?
用jstack排查 先执行top,找到CPU占用比较高的进程 jstack 进程id > show.txt 找到进程中CPU占用比较高的线程,线程id转为16进制 到show.txt文件中根据线 ...
- jvm 崩溃日志设置_记一次JVM疯狂GC导致CPU飙高的问题解决
背景 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题.解决问题首先要找到问题的爆发点,对于 ...
- JVM优化之系统CPU飙高和GC频繁
本文来说下JVM优化之系统CPU飙高和GC频繁 文章目录 概述 Full GC次数过多 CPU过高 某个线程进入WAITING状态 死锁 本文小结 概述 处理过线上问题的同学基本上都会遇到系统突然运行 ...
- 生产环境CPU飙高问题解决,记一次完整解决过程
一.发现问题 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值Q ...
- 记一次jvm疯狂gc导致CPU飙高的问题解决
在环境上遇到tomcat频繁gc导致cpu load飙高的问题,本来想自己写一个文章的,看到这个偷懒转载一下. 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高. ...
- CPU飙高的常见场景及处理办法
mysql进程飙高 简述 各位服务端开发的同学,在使用mysql的过程中,大概都有遇到过cpu突然飙高到的情况,比如达到了200%.数据库在执行查询或者修改数据时,系统需要消耗大量的cpu算力来维护存 ...
- 记一次服务器CPU飙高使用率超过100%原因分析(Arthas)
文章目录 背景 一.告警分析 二.原因分析 1.找到java进程 2.进入 Arthas 3. 使用 Arthas 找到CPU占用最高的线程 4.定位原因 5.解决方案 总结 背景 某天下午频繁收到预 ...
最新文章
- boost asio 异步实现tcp通讯
- linux脚本运行java程序设计_Java运行Shell脚本
- CentOs7安装JDK/Tomcat/Git/Gradle
- 【转】Elasticsearch5.0 安装问题集锦
- vue请求封装,Store-状态管理部分(文档笔记)
- linux安装rabbitmq过程,Linux安装RabbitMQ
- C++模板中关键字typename与class的区别
- ubuntu安装过程中遇到的一些问题及解决办法。
- HoloLens 2开发:HoloLens开发VS安装与配置
- (转)首个比特币投资基金在加拿大获批上线!
- linux 16.04系统下载,【Ubuntu1604镜像下载】乌班图系统Ubuntu 16.04 官方正式版-开心电玩...
- Python整理PEER所下载的地震波源数据——提取地震波至txt+生成地震波反应谱
- SAP License:影响中国信息化全面预算管理八大成功案例
- idea中xml文件用浏览器打开
- 【学习笔记】黑马程序员Java课程学习笔记(更新至第12章---集合)
- 滤波器时间域与空间域幅频特性matlab绘图方法
- 树莓派开机自启动opencv程序脚本及报错分析及拓展
- 【Linux】RHCE -- RHCSA 认证考试 模拟练习题解析
- Objective-C基础教程读书笔记(3)
- 转发:博士毕业,也写一些发文章的心得
热门文章
- 菜鸡的求学之路-JavaScript
- 计算机的自动播放功能有什么用,禁用自动播放功能的几种方法
- 【培训版】《最强大脑记忆力训练教程》[2017年7月份更新]
- 服务器usb驱动安装系统安装失败怎么办,USB3.0驱动无法安装失败怎么办?USB驱动失败失败的解决方法...
- 论文阅读-LEARNED STEP SIZE QUANTIZATION
- 计算机组成x什么意思,cpu后面带x是什么意思
- python 写命令行_一个用python写的用命令行看糗百的小工具
- leetcode (Find All Numbers Disappeared in an Array)
- 电信主机托管费用_服务器托管的收费标准(必读)
- 青铜器RDM与PTC Windchill协同构建货真价实的PLM解决方案