tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题。

一、现象描述

在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是pengding的状态。

二、排查过程

我这里tomcat部署在linux环境中。下面的排查过程均在linux下进行。

1、排查后台服务

查看tomcat的后台日志,发现日志正常打印,未发现异常信息;把要执行的SQL复制出来,放到mysql的客户端执行,发现sql运行正常且查询速度正常。

通过上面的排查发现要访问的功能正常,排除是当前功能造成的原因。

2、排查服务器

1、找出耗CPU的进程

使用top命令查看特定用户(user1)的内存、cpu及各进程的信息,

top -u user1

使用上面的命令,可以看到下面的信息,

从上面可以看到存在一个java的进程,由于我这里没有其他的java相关的进程,这里可以判断为tomcat的进程,这里可以看到PID为47787,通过%CPU、%MEM分别表示CPU、内存的使用率,由于我这里问题已经解决,所以看到CPU的使用率已经下来了,异常情况下可以是超过100%的数值。

这样我们就可以找出使用CPU过高的进程。

还可以通过下面的命令来快速找到java进程,

jps

使用jps命令可以快速找到java进程的PID,如下图

这里可以看出PID为47787为tomcat进程。还可以使用下面的命令,

ps -ef |grep tomcat

上面的命令打印出下方的信息,

回到正题,上面使用top命令找到了CPU过高的进程。

2、找出耗CPU的线程

在上一步中找到了耗CPU的进程,下面要找到耗CPU的线程。我们知道一个进程中可以有多个线程,进程是线程的集合。

使用下面的命令找到耗CPU的线程,

top -Hp 47787

上面的“47787”即上一步中找到进程id,意思就是找出该进程下的线程信息。如下图,

从上图中可以看到该进程下的线程信息,由于我这里已经正常了,所以未看到CPU过高的线程,上图中的PID这里代表的是线程ID。假如47875这个线程的%CPU使用过高,

下面把该线程ID,转化为16进制。

printf "%x" 47875

从上图可以看出47875的16进制为“bb03”。

上面,通过进程ID,找到了耗CPU的线程ID,并且转化为了16进制。

3、从JVM堆栈中查找线程信息

我们获得了耗时较高的线程ID,下面通过JVM的堆栈信息找到线程信息,那么如何获得JVM的堆栈信息那,使用下面的命令

jstack 47787 > ./jvm.log 

上面的“47787”代表的是上面的进程ID,打印出47787进程的堆栈信息,保存在当前目录的jvm.log文件中。

下面从jvm.log文件中找到上面的线程信息,

grep -rn bb03 ~/jvm.log -A 100

找到下面的信息,

从上面可以看到是一些线程信息,那要怎么去排查那,可以通过上图红框中的状态为RUNNABLE的线程信息,即为正在运行的线程,从这里可以找到相关的信息,最终解决问题。

三、总结

CPU使用率过高,多数是因为线程无法终止或出现死循环等原因,需具体问题具体分析。

最后

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

java cpu过高排查_CPU使用率过高,访问页面的速度越来越慢?今天我教你解决相关推荐

  1. java cms cpu占用率_cpu使用率过高和jvm old占用过高排查过程

    今天断断续续的收到管理平台的异常报警,cpu占用过高和jvm old占用过高,这个时候赶紧去排查原因,下面记录了我的排查过程,可能里面还有不正确的地方,欢迎各位大佬指正,也欢迎大家关于类似的案例一起交 ...

  2. java资源使用效率较高,Java 进程资源使用率较高问题定位

    在实际开发过程中,有些 Java 程序在本地或者在服务器上都可以运行的较正常,但是运行较长一段时间后,可能会出现资源占用率较高的情况,例如 CPU 或 内存占用率较高等情况,以至于发生内存溢出,进程假 ...

  3. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题

    原标题:Linux系统下Java问题排查--cpu使用率过高或多线程锁问题 一个系统.特别是多线程并发的后台系统,在某些特定场景下,可能触发系统中的bug:导致cpu一直居高不下.进程hang了或处理 ...

  4. java应用cpu使用率过高问题排查

    ---------------------------------------linux下如何定位代码问题------------------------------- 1.先通过top命令找到消耗c ...

  5. Java应用CPU使用率过高排查

    1.使用top命令查看使用CPU过高的进程 top top - 14:16:06 up 27 min, 3 users, load average: 0.00, 0.01, 0.02 Tasks: 8 ...

  6. java项目内存使用率过高排查_项目内存或者 cpu 占用率过高如何排查

    前言:小编总结了之前生产环境cpu 占用率过高等问题,小编功力不够深厚,文章如有不对的地方,还望各位大神指正. 排查原因:客服反馈说系统访问缓慢 一. 在排查问题的过程中针对 CPU 的问题, 使用以 ...

  7. 用于快速排查Java的CPU性能问题(top us值过高)

    转载于GIT路径 https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#beer-show-busy-java-th ...

  8. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  9. jstack排查cpu使用率过高

    jstack排查cpu使用率过高 步骤: 1.top命令找出最高占用的进程(command为java) 2.查看高负载进程下的高负载线程:top -Hp [PID] (或 ps -mp PID -o ...

最新文章

  1. linux小知识之硬盘健康状态检测
  2. java 服务器读取客户端文件,java 服务器读取客户端文件
  3. linux刮刮乐小游戏源代码,HTML5-Canvas实例:刮刮乐游戏
  4. 笔记本启动关闭小键盘NUM LOCK的N种方法
  5. springboot maven父项目脚手架
  6. 电动汽车仿真系列-基于动态规划的混合动力汽车能量管理
  7. 各省产业结构-高级化指数(二产与三产比值)合理化指数
  8. KVM vCPU创建过程
  9. Unity 2019.1 使用Denoise大大减少光照贴图的烘烤时间
  10. Pygame做一期吃豆子游戏
  11. LaTeX 格式、字母、符号、公式 (总结)
  12. 【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能
  13. 计算机与宽带路由的连接步骤,电脑路由器连接图文教程
  14. flutter集成Apple第三方登录
  15. GNS3 mac环境安装并搭建vlan
  16. Web前端 笔记 (21-45)
  17. 【面试总结】JNI层MediaScanner的分析,挥泪整理面经
  18. 数据结构算法-二叉树
  19. [wp7软件]相机 画图 截屏 photo 集合 软件(一)
  20. C++弹幕游戏自制分享

热门文章

  1. js 读取flask后台变量
  2. Unknown column 'subject_1.pid' in 'field list') [SQL: 'SELECT anon_1.screen_id AS anon_1_screen_i
  3. pytorch学习笔记(二):gradien
  4. ffmpeg Windows Error 0xe06d7363
  5. VS2015编译Boost1.64
  6. pycharm调试显示图片
  7. Java从基础进阶到高手
  8. 数组取10个元素_不知道取什么样的英文名,看看老外最喜欢取的10个男孩和女孩名...
  9. c语言普通变量间接访问,C语言学习笔记-指针
  10. java 线性的排序算法_077-线性查找分析和实现