面试问题---JAVA程序CPU占用过高怎么定位
面试问题---JAVA程序CPU占用过高怎么定位
今天一个电话面试问了这个问题。回来查了下答案,自己也顺带操作一遍,做个记录。之前只知道jstack工具可以查看线程状态这些。比如死锁这些,主要是之前不知道top -H -p pid这个命令的使用,这命令可以看到进程下面线程信息,拿到线程ID,然后再结合jstack命令使用就可以解决这个问题了。下面记录一下具体的操作步骤:
1.打个jar包丢到机器上运行
package com.nijunyang.test;
public class TestApplication {
public static void main(String[] args) { for (int i = 0; i < 50; i++) { new Thread(()->test()).start(); } } public static void test() { while (true) { int a = 1 + 6; System.out.println(a); } }
}
使用这个maven插件 打包jar
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.nijunyang.test.TestApplication</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
- java -jar test-0.0.1-SNAPSHOT-jar-with-dependencies.jar 运行程序
一直在输出
3.top |grep java 或者 jps指令找到java进程的pid(6167)
4. top -H -p pid 以线程的形式查看该进程 top -H -p 6167
因为我们程序是起了50个线程 所以这里就会展示这个进程中的所有线程呢
5.前面的线程ID是10进制的,,需要转换成16进制,,因为等下在jstack命令取出来的线程ID是16进制的:这里就随便选一个线程ID 去转换了,真实环境肯定是选择CPU占用率最高的那个线程,echo "obase=16;6219" | bc
6.jstack 6167 >threadInfo.txt 信息输出到文件 然后查看。也可以直接在命令里面查看
7.文件中查找184b的线程ID信息,就可以找到是哪个线程导致的内存占用过高,同时也能看到具体的代码位置
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Gartner对于建设「数据中台」的建议
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 数据中台是中国本土诞生的一个名词,很多企业在“什么是数据中台”和“我要上XX中台”徘徊。其炒作程度跟当年的“大数据” 一词有的一拼,如果用Gartner的炒作周期图来看,数据中台目前已经逼近炒作的顶峰。 与其不断地讨论什么是数据中台,企业更应该了解建设数据中台的目的是让企业高效的数据驱动,减少重复的架构建设。如果要用一张图来描绘Gartner如何看待数据中台的建设方向,可以如下图所示。 数据中台的建设方向应该处于企业数字化平台的核心,即Gartner定义的数据和分析平台(红色虚线部分),帮助企业的数字化平台(客户体验平台,生态系统平台,物联网平台和内部信息系统)的业务用户做出更好的决策,并在各个数字化平台的合作孵化下形成可复用的数据分析能力。数据分析能力应该在业务端无处不在且高度自助,最终助力数字化平台实现Gartner定义的封装的业务能力 (Packaged Business Capability)。 以下是Gartner对于想建设数据中台企业的建议。 一、数据中台中数据管理策略的平衡...
- 下一篇
Python 为什么没有 main 函数?为什么我不推荐写 main 函数?
Python 为什么没有 main 函数?为什么我不推荐写 main 函数? 毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提“Python 的 main 函数”、“建议写 main 函数”…… 有些人是知情的,他的意图可能是模仿那些正宗的 main 函数,但还有不少人明显是被误导了(或自己误解了),就写出来很累赘的代码。 本期“Python 为什么”栏目来聊聊Python 为什么没有 main 函数? 在开始正题之前,先要来回答这两个问题:所谓的 “main 函数”是指什么?为什么有些编程语言需要强制写一个 main 函数? 某些编程语言以 main 函数作为程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它们具有特定的含义: main 函数名是强制的,也就是要求必须有一个 main 函数main 函数最多只能有一个,也就是说程序的入口是唯一的语法格式有一定的要求,具有相对固定的模板为什么要强制一个 main 入口函数呢? 这些语言是编译型语言,需要把代码编译成可执行的二进制文件,为了让操作系统/启动器找到程序的起点,所...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16