CPU占用高系统反应慢之问题定位
今天遇到测试服务器比较卡,调用调用超时,响应很慢,成功率低的问题,然后想着去处理这个问题。
本着开发的精神,摒弃网管的水平,寻找问题的根源。
主要从如下几个方面入手:
1:查询服务器硬件等情况(一般不会)
2:查看网络是否正常,是否因为网络的原因导致服务器缓慢,是否nginx/apache类的代理原因。
3:查询服务器日志是否正常,如果是Tomcat,则看下容器日志是否正常,应用日志是否正常等
4:查询服务器是否正常,本文讲述的是服务器查看方面的情况
排查方法:
一: top命令查询哪些进程导致了服务器处理器及内存使用情况
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.
比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;
而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
一:执行命令,查询哪些进程导致了服务器CPU高或者内存高等问题(下图只是写博客的时候,从服务器中截图,非实时排查的时候的图,图仅供参考)
查询过程中,可以通过此命令,排查是CPU高还是内存高。
如果是CPU高,则看对应的CPU高的进程问题的线程列表。
如果是内存使用高,则看对应内存高的进程的线程列表,定位问题。
top

二:使用top -Hp pid查询具体的进程中的线程使用情况(本次主要讲解CPU的问题)
假使上图中的PID为529的JAVA进程占用CPU 比较高,那么我们就需要查询下这个进程下哪个线程占用了高。
可以通过命令top -Hp 529来查询线程列表,列表如下

假如上图中,看到859的线程占用的CPU很高,那么可以看到 PID是 529 ,CPU使用率,内存使用率等
使用在线工具,直接转换 859 转换 为35b 在线进制转换工具
三:杀JavaCore找出对应的线程信息
获取javacore和heapdump文件的方法有两种:
第一种:
系统发生内存溢出,在目录下会生产javacore和heapdump文件生成(最常见的一种)
第二种:
手动触发生成javacore和heapdump文件
kill -
在某些系统中,可以使用kill -3 来杀进程(部分系统或者容器不支持),获取到JavaCore线程信息,或者使用jstack来获取。
当时的主要发现mysql有较多的locked,所以试着查询资料及继续分析,具体资料如下
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
- locked <0x00000000a1c98270> (a com.mysql.jdbc.util.ReadAheadInputStream)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3036)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3489)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3478)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4019)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1398)
- locked <0x00000000a1c753c0> (a com.mysql.jdbc.JDBC4Connection)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:856)
- locked <0x00000000a1c753c0> (a com.mysql.jdbc.JDBC4Connection)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
- locked <0x00000000a1c753c0> (a com.mysql.jdbc.JDBC4Connection)

四:根据生成的信息,分析CPU使用情况
查询资料及分析当时的情况
分析如下:
1:当时的环境,出现慢SQL的情况,定位发现,查询时间过长,发现SQL触发了性能安全机制,自动加入黑名单中,且数据库线程被自动杀死
2:通过网上的资料原因可能是操作系统bug。
3:解决方案:上网查询相关资料,增加数据库的链接时间,试着增加链接超时时间及stocket时间,进行测试

CPU占用高系统反应慢之问题定位的更多相关文章
- C# Winform程序CPU占用高的原因和解决方法
程序CPU占用高的可能原因: 1.存在死循环: 为什么死循环会导致CPU占用高呢? 虽然分时操作系统是采用时间片的机制对CPU的时间进行管理的,也就是说到了一定时间它会自动从一个进程切换到下 ...
- Microsoft(C)注册服务器(32位)CPU占用高
Microsoft(C)注册服务器(32位)CPU占用高 摘自:https://blog.csdn.net/jtsqrj/article/details/83034252 2018年10月12日 23 ...
- 如何在 Linux 中找出 CPU 占用高的进程
1) 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程 在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个.top 命令提供了 Linux ...
- 【面试普通人VS高手系列】CPU飙高系统反应慢怎么排查?
面试过程中,场景类的问题更容易检测出一个开发人员的基本能力. 这不,一个小伙伴去阿里面试,第一面就遇到了关于"CPU飙高系统反应慢怎么排查"的问题? 对于这个问题,我们来看看普通人 ...
- 在 Linux 中找出 CPU 占用高的进程
列出系统中 CPU 占用高的进程列表来确定.我认为只有两种方法能实现:使用 top 命令 和 ps 命令.出于一些理由,我更倾向于用 top 命令而不是 ps 命令.但是两个工具都能达到你要的目的,所 ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- centos7-java模拟cpu占用高及排查
环境 centos7 1核2GB Java8 模拟cpu占用高 新建一个名为jvm-learn的springboot项目 模拟代码如下 import org.springframework.boot. ...
- SQL Server中查询CPU占用高的SQL语句
SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests 一.查看当前的数据库用户连接有多少 USE ...
- 转载:SQL Server中查询CPU占用高的SQL语句
SQL Server中查询CPU占用高的SQL语句 SQL Server 表变量的用法 究竟什么是敏捷测试--朱少民
随机推荐
- 手动实现自己的spring事务注解
spring事务是基于同一个数据连接来实现的,认识到这一点是spring事务的关键,spring事务的关键点便在于在事务中不管执行几次db操作,始终使用的是同一个数据库连接.通过查看源码,我们可以看到 ...
- [转载] jmeter Bean Shell的使用
Jmeter有哪些Bean Shell 定时器: BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器: BeanShell Sampler 后置处理器:B ...
- IServiceBehavior IContractBehavior IEndpointBehavior IOperationBehavior
using System; using System.Collections.ObjectModel; using System.Reflection; using System.ServiceMod ...
- vue-ueditor-wrap报错,vue ueditor 加载ueditor.config.js失败,请检查您的配置地址UEDITOR_HOME_URL填写是否正确!
1.第一次报错后,仔细看了官方文档,少了第一步,下载UEditor源码,放到public目录(前提你用的是vue-cli 3.x的版本). 好那就下载,下载的是vue-ueditor-wrap作者修复 ...
- EntityFramework进阶(五)- 分页
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 我们创建分页信息类CommonPagedList,包含了字段总条数,总页数,当前页码,页大小,当前页数据. us ...
- soapUI与post测试soap webservice接口
之前装了SoapUI,最近装了Postman,分别用它们测试了WebService,下面为用法. 测试的在线WebService(数据来源于中国气象局)Endpoint: http://www.web ...
- MYSQL安装与卸载(一)
系统:win10(其他版本系统不在本次内容) MYSQL下载地址:https://dev.mysql.com/downloads/mysql/ MySQL安装主流分为两种:msi,zip Zip:压缩 ...
- 缓存数据库memcache、redis原理对比
一.问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里 ...
- Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序
Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序 [Problem Description] 给你 ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...