专栏首页编程理解Java 进程资源使用率较高问题定位

Java 进程资源使用率较高问题定位

在实际开发过程中,有些 Java 程序在本地或者在服务器上都可以运行的较正常,但是运行较长一段时间后,可能会出现资源占用率较高的情况,例如 CPU 或 内存占用率较高等情况,以至于发生内存溢出,进程假死等的情况。这些问题发生的原因,往往是那些易忽略的编程规范导致的。下面描述一个定位开发环境上资源占用率较高问题的流程。

1. top 命令查看资源占用率进程

获得占用资源较高的进程 pid 后,可以通过 ps -ef | grep pid 查看该进程属于哪一个服务,方便后续查看具体代码,搜索问题。

2.查看该进程下哪些线程资源占用率较高

使用 top -Hp pid 可以查看该进程下各线程的资源占用情况,找到资源占用较高的线程 pid,此处以 t_pid 表示该值。此处需要切换为执行 pid 进程的用户来查看进程信息。

后续使用的命令可能需要自己下载对应版本的 jdk,一般环境上只提供服务运行的 jre。这里简单的方式为下载服务对应的 java 版本的 jdk,例如放在 /tmp 目录下,配置 ~/.bashrc 文件,添加如下内容,并执行 source .bashrc

JAVA_HOME=/tmp/jdk/
JRE_HOME=$JAVA_HOME/jre
JAVA_BIN=$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME PATH CLASSPATH
export JAVA_OPTS=-Djava.awt.headless=true

3.查看 pid 进程的堆栈信息

使用 jstack pid 查看该进程下各线程的堆栈信息,搜索线程中 nid 值为上一步获得的 t_pid 线程。如果是一般用户线程,则可以根据线程的调用链,在服务代码中定位出具体故障位置。

4.查看内存使用情况

使用 jmap -heap pid 查看内存中各区域使用情况,使用 jmap -histo pid 查看内存中的存储对象类型。如果上一步堆栈信息中占用资源较高的线程为 GC 线程的话,则该步骤查看的内存使用情况可以辅助判断 GC 的性能优略。

如果是 CPU 使用率过高,一般是该 t_pid 为一个死循环;如果是内存使用率过高,则该 t_pid 可能为 GC 线程或构造对象线程。

下面提供一种曾经遇到过的场景供参考:

使用 top 命令查看资源使用情况时发现,CPU 使用率一直较高,内存使用率忽高忽低。在具体进程中发现有两个线程的 CPU 使用率较高,在进程堆栈中查看这两个线程一个为 VM Thread 协调线程,一个为 GC 线程。查看内存使用,发现偶尔内存各区域会出现占满情况,且存储大量 MapEntry 对象,因为关联关系为强引用,导致 GC 效率较低且频繁执行,进程空间得不到释放,直到线程执行完毕。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux命令使用:diff、patch与dirname

    Linux 是一种开放源代码的类 UNIX 操作系统,以其安全性和稳定性的优势,加上开源的特性和软件生态,被常用作服务器的操作系统。

    zhipingChen
  • Leetcode 371. 两整数之和

    不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

    zhipingChen
  • 数据结构(一):二叉树

    二叉树( binary tree )是有限节点集合构成的结构,其结构的递归定义为:

    zhipingChen
  • 当CPU飙高时,它在做什么

    纯洁的微笑
  • JVM故障分析及性能优化实战(I)——使用jstack定位线程堆栈信息

    前一段时间上线的系统升级之后,出现了严重的高CPU的问题,于是开始了一系列的优化处理之中,现在将这个过程做成一个系列的文章。

    IT技术小咖
  • 部署云服务器--(3) Linux系统用脚本方式实现Tomcat的开机自启动

    此篇教程在我的电脑(deepin-generic)上是可以用的,做好脚本后重启立即生效,但是在服务器(CentOS-7.3),需要开机后等待十几分钟,原因不明...

    浩Coding
  • 报告称2018年所有智能手机将采用生物识别技术

    据FindBiometrics网站报道,美国市场调查机构Acuity将其之前对移动生物识别技术增长的预期调高了一倍。在一份新的报告中,这家市场调查机构再次表示,...

    人工智能快报
  • 5G的NSA和SA,到底啥意思?

    从2017年年底开始,这两个概念就已经进入我们的视线。当时,5G NSA标准正式发布,曾经引起全球的广泛关注。

    鲜枣课堂
  • 聊聊技术部门Leader是不是一定要技术大牛担任?

    能否做出好的技术选型节约团队研发时间?能否管理好老板不合理的预期?能否整合公司其他部门资源为本部门所用?能否把本部门的价值输出最大化?能否给部门产品技术赋能,形...

    黄鸿波
  • ElasticSearch可扩展的开源弹性搜索解决方案

    3.分析过程:预备字段内容,并将其转换为可以写放Lucene索引的词项(term)的过程

    硬核项目经理

扫码关注云+社区

领取腾讯云代金券