java进程占用CPU高的问题

摘要:
I如何查看上一节中的CPU利用率?默认情况下,ps每3秒刷新一次:仅显示每个进程的资源使用情况;顶级用户模式CPU和内核模式CPUUpidstat不细分为进程;您可以分析每个进程的CPU使用情况;通过top、ps和pidstat,您可以快速找到CPU使用率高的进程。
一. 上节回顾

怎么查看CPU使用率?

top:显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况。默认每隔3s刷新一次

ps:只显示每个进程的资源使用情况

top并没有细分进程的用户态CPU和内核态CPU

pidstat:可以分析每个进程的CPU使用情况

通过top,ps,pidstat这些工具,能够很快找到CPU使用率较高的进程。要知道CPU到底是哪个函数导致的问题,需要其它的工具,比如:perf top

perf top:类似于top,它能够实时显示占用CPU时间最多的函数或命令,因此可以用来查找热点函数

二. java进程占用CPU高

1. 准备工作

前提条件:

(1) 安装并配置好jdk环境变量(安装位置:/usr/local),安装教程:CentOS7安装JDK1.8图文教程

(2) 安装tomcat(安装位置:/data),注意和jdk版本的对应关系(tomcat 9-->jdk 8)

安装完成后,需要在Centos7上关闭防火墙

#查看防火墙状态
firewall-cmd --state
#关闭防火墙
systemctl stop firewalld.service

(3) 把pertest.war放到/data/apache-tomcat-9.0.19/webapps下,启动tomcat,看能不能访问http://192.168.0.109:8080/pertest/init1.jsp

java进程占用CPU高的问题第1张

(4) 使用Jmeter制造阶梯型场景,并发20个线程数,持续运行20分钟,需要产生一个比较大的压力,看服务器的资源使用情况

java进程占用CPU高的问题第2张

java进程占用CPU高的问题第3张

(5) 根据top命令,发现pid:1480的进程占用CPU高达90%以上。输入top按1

java进程占用CPU高的问题第4张

(6) 通过命令:ps aux | grep 1480,进一步确定是tomcat的进程导致的

java进程占用CPU高的问题第5张

(7) 怎么定位到是哪个线程或者代码导致的?

这个时候就需要显示线程列表:ps -mp 1480-o THREAD,tid,time

找到耗时最高的线程,可以看到1482这个线程,占用时间变化较大

java进程占用CPU高的问题第6张

java进程占用CPU高的问题第7张

比如:1482这个线程,占用CPU盖度82%,它还在不断的升高

(8) 把这个线程的id转为16进制格式:printf "%x " 1482

java进程占用CPU高的问题第8张

(9) 打印线程的堆栈信息:jstack 1480 | grep 5ca -A60 

java进程占用CPU高的问题第9张

(10) 在日志里查看:grep 'OutOf' catalina.out,可以看到内存溢出了

java进程占用CPU高的问题第10张

日志里也可以看到一些BLOCKED,WAITING等

java进程占用CPU高的问题第11张

java进程占用CPU高的问题第12张

免责声明:文章转载自《java进程占用CPU高的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何将文件所有者改为TrustedInstallerawk 调用 shell 命令,并传递参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

操作系统知识总结

操作系统 面向进程和线程学习操作系统。 目录 Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 进程线程模型 进程间通信 同步互斥机制 存储管理 网络I/O模型 内容 进程线程模型 线程和进程的概念已经在操作系统书中被翻来覆去讲了很多遍。很多概念虽然都是套话,但没能理解透其中深意会导致很多内容...

Jmeter性能测试-jp@gc

本文参考了:https://www.cnblogs.com/yagao/p/12614175.html   Throughput Shaping Timer 是用来控制吞吐量的定时器,通过延缓线程运行来整体控制取样器产生的RPS。 实际使用中: 1. 可以通过设置在不同吞吐量分别持续一段时间,考察系统在不同吞吐量情况下的稳定性 2. 可以通过设置随着时间持...

VC++开发垃圾文件清理软件(上)

VC++开发垃圾文件清理软件(上)     转自:http://www.cnblogs.com/JczmDeveloper/archive/2013/03/22/2974716.html   去年年底那会写了个很简单的垃圾文件清理器,现在简要分享下吧,由于本人初学者,望大家多多指教,先上个图吧:(在各大搜索引擎可以直接搜索到本软件,软件的名称为:小蔡垃...

Jmeter属性和变量

一、Jmeter中的属性: 1、JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2、JMeter属性在测试脚本的任何地方都是可见的(全局),通常被用来定义一些JMeter使用的默认值,可以用于在线程间传递信息。 3、JMeter属性可以在测试计划中通过函数 _P 进行引用,但是不能作为特定线程的变量值...

jmeter(18)counter计数器函数和计数器配置元件

一. 计数器函数counter 1、计数器函数每次调用时都会生成一个新数字,从1开始逐渐增加1。计数器可以配置为将每个摸拟用户的值分开,或者为所有用户使用相同的计数器。如果每个用户的值县有单独的增量。则类似于计算测试计划中的迭代次数。全局计数器计算该请求运行的次数。 计数器使用整数变量来保存计数,因此最大值为2,147,483,647。 2、参数 1)第一...

计算机CPU之CISC、RISC、x86、IA32、x86-64、IA64、ARM

CPU  中央处理器(central processing unit,CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。   中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个...