排查tomcat服务器CPU使用率过高-阿里云开发者社区

开发者社区> 优惠活动> 正文

排查tomcat服务器CPU使用率过高

简介:
+关注继续查看

排查tomcat服务器CPU使用率过高

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 "%xn" 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使用率过高,多数是因为线程无法终止或出现死循环等原因,需具体问题具体分析。

原文地址https://www.cnblogs.com/teach/p/12660541.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
小心!使用网页版的WhatsApp时,请选择隐私模式
本文讲的是小心!使用网页版的WhatsApp时,请选择隐私模式,2015年,WhatsApp推出网页版,这让许多用户感觉一下方便了许多,因为使用键盘打字比触摸屏要快得多,而且复制粘贴、添加附件也更容易。不过在用户体验提升的同时,也带来了一些安全问题,最明显的就是隐私泄露。
2412 0
JDK及tomcat服务器的配置
JDK及Tomcat的环境配置方法 一、JDK 1.在系统变量中新建JAVA_HOME 输入JAVA_HOME,  变量值里面输入D:\JavaDeveloper\jdk1.5(JDK的安装路径) 如图:    2.然后再新建一个CLASSPATH,其值为: %JAVA_HOME%\lib\ 如图:   3.修改PATH环境变量,在其值后面加入  %JAVA_HOME%\bin 如图:   4.测试是否配置成功 在命令提示符下输入Java,如果出现以下画面表示成功。
666 0
查看磁盘阵列 使用率(简单)
<div style="margin:0px; padding:0px; border:0px; line-height:1.57143em; font-family:gotham,helvetica,arial,sans-serif; font-size:14px; color:rgb(56,56,56)"> <span color="#00B4AE" face="宋体, Lucida
1376 0
Idea配置Tomcat服务器
我们都知道Idea的功能非常强大,插件很多,很多能帮助我们快速开发的东西都已经集成在idea内部了。假如我们做Java Web开发,需要配置Tomcat服务器。
1184 0
【C++中消息自动派发之四】使用IDL构建Chat Server
  前一篇blog 讲了如何实现IDL 解析器,本篇通过IDL解析器构建一个聊天服务器程序。本程序用来测试IDL解析器的功能,网络层使用前边blog中介绍的ffown库。我们只需定义chat.idl文件,idl解析器自动生成消息排放代码,省了每次再去繁琐的编写消息解析、判断代码。
1094 0
主机cpu突然飙高,如何快速排查问题
主机cpu突然飙高,如何快速排查问题[问题发现] 使用zabbix软件监控服务器时发现cpu突然异常,在业务主机上使用top命令查看系统的整体运行情况,使用top命令后发现mysqld占用CPU特别高,初步判断可能是mysqld出现问题,需要排查: [排查步骤] Step1: 登录oneapm ai平台后可以看到应用列表的总览视图,在总览视图中可以看到所有应用的名称以及相关指标信息,同时我们还可以根据应用颜色变化来判断每个应用的指标变化情况。
1256 0
+关注
优惠活动
阿里云代金码,领券优惠bieryun.com
93
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载