文档章节

关于JVM CPU资源占用过高的问题排查

罗文浩
 罗文浩
发布于 2016/04/19 22:00
字数 397
阅读 105
收藏 15



总结下最近工作中问题排查方法,问题是jvm cpu占用过高

一、背景:

    先执行一个java程序里面开了两个线程分别都在while循环做打印操作。    

?
1
# java -cp ./test-threads.jar com.spiro.Main

二、现象:

    通过top命令查看当前CPU情况

    

    可以看到有个java进程占用CPU过高,下面来排查是什么线程的什么代码导致CPU过高。

三、步骤

    先获得PID为2023,上图可以看到,或者通过jps命令获取。 执行以下命令:   

?
1
# top -H -p2023

说明: -H 指显示线程,-p 是指定进程

    结果:


    

    可以看到两个CPU占用较高的线程,记下PID 2033和2034 ( 此处的PID即为线程ID标识) ,将其从十进制转成十六进制表示,可通过windows自带的计算器来转。得到结果分别为7f1和7f2

    再通过jstack命令获取当前线程栈,可暂时保存到一个文件tempfile.txt中;  

?
1
# jstack -l 2023 > tempfile.txt

在tempfile.txt中查找nid=0x7f1的线程:  

    可以看到我们找到的线程Thread-0,以及该线程的状态和正在执行的代码行,本例中显示当前正在执行Worker类的15行。然后可去代码中查看不合理的逻辑

四、总结

    该方法很有用,多次使用该方法定位出程序中的性能问题,在此分享和记录。

本文转载自:http://my.oschina.net/

共有 人打赏支持
罗文浩
粉丝 21
博文 138
码字总数 223451
作品 0
海淀
架构师
私信 提问

暂无文章

Java 主要特性

Java 有下面的一些主要特性。 面向对象 在 Java 中,所有的都是对象。正式因为 Java 基于对象模型,所以 Java 更加容易进行扩展。 Java语言提供类、接口和继承等面向对象的特性,为了简单起见...

honeymose
46分钟前
1
0
【NLP】【五】gensim之Word2Vec

【一】整体流程综述 gensim底层封装了Google的Word2Vec的c接口,借此实现了word2vec。使用gensim接口非常方便,整体流程如下: 1. 数据预处理(分词后的数据) 2. 数据读取 3.模型定义与训练...

muqiusangyang
47分钟前
1
0
Python爬虫之网络请求

urllib库中常用函数的使用 安装 urllib库是安装python时自带的一个库,不需要再另外安装; 使用 #!/usr/bin/python3# -*- coding:utf-8 -*-# @Time : 2018-11-10 21:25# @Author : M...

村雨1943
今天
4
0
Linux学习-1030(定时任务、任务管理、)

10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/478722 2. xin......

wxy丶
今天
3
0
git push origin与git push -u origin master的区别

$ git push origin 上面命令表示,将当前分支推送到origin主机的对应分支。 如果当前分支只有一个追踪分支,那么主机名都可以省略。 $ git push 如果当前分支与多个主机存在追踪关系,那么这...

clin003
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部