JVM导致系统CPU高的常见场景:

内存不足,JVM gc频繁,一般会伴随OOM
JVM某个线程死循环或者递归调用

定位和解决
1.内存不足,gc频繁可参考我的这遍文章解决。https://blog.csdn.net/moranzi1/article/details/88670204
2.JVM某个线程死循环或者递归调用。这种情况关键是找到导致CPU高的线程。然后根据具体线程具体分析为什么该线程会导致CPU高。需要线程的步骤如下。

top——命令查看cpu高的进程

[root@iZwz9gs2zseivevv1k5vnkZ syp]# top
top - :: up days, :, users, load average: 4.59, 4.16, 3.26
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 84.1 us, 4.5 sy, 0.0 ni, 10.8 id, 0.1 wa, 0.0 hi, 0.6 si, 0.0 st
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root S 293.0 6.0 :23.05 java
root S 15.9 3.2 : java
root S 12.0 5.0 : java
root S 2.3 5.3 :16.27 java
root S 2.0 4.8 :26.20 java
root - S 2.0 0.1 :57.96 AliYunDun

ps aux | grep PID——命令查看具体进程信息

ps -mp pid -o THREAD,tid,time——命令查看进程线程信息,找到导致CPU高的线程TID

[root@iZwz9gs2zseivevv1k5vnkZ syp]# ps -mp  -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 22.7 - - - - - - ::
root 0.0 - futex_ - - ::
root 0.1 - futex_ - - ::
root 4.6 - - - - ::
root 4.6 - - - - ::
root 4.6 - - - - ::
root 4.6 - - - - ::
root 1.2 - futex_ - - ::

printf "%x\n" tid——命令转换线程为16进制格式

[root@iZwz9gs2zseivevv1k5vnkZ syp]# printf “%x\n”
“2f4dn” [root@iZwz9gs2zseivevv1k5vnkZ syp]# printf “%x\n”
“2f4en” [root@iZwz9gs2zseivevv1k5vnkZ syp]# printf “%x\n”
“2f4fn” [root@iZwz9gs2zseivevv1k5vnkZ syp]# printf “%x\n”
“2f50n”

jstack pid |grep tid -A 30——命令查看线程信息,定位到具体线程

[root@iZwz9gs2zseivevv1k5vnkZ syp]# jstack  | grep 2f4d -A
"GC task thread#0 (ParallelGC)" os_prio= tid=0x00007f223405e000 nid=0x2f4d runnable "GC task thread#1 (ParallelGC)" os_prio= tid=0x00007f2234060000 nid=0x2f4e runnable "GC task thread#2 (ParallelGC)" os_prio= tid=0x00007f2234061800 nid=0x2f4f runnable "GC task thread#3 (ParallelGC)" os_prio= tid=0x00007f2234063800 nid=0x2f50 runnable "VM Periodic Task Thread" os_prio= tid=0x00007f22341ed800 nid=0x2f59 waiting on condition JNI global references: [root@iZwz9gs2zseivevv1k5vnkZ syp]# jstack | grep 2f4e -A
"GC task thread#1 (ParallelGC)" os_prio= tid=0x00007f2234060000 nid=0x2f4e runnable "GC task thread#2 (ParallelGC)" os_prio= tid=0x00007f2234061800 nid=0x2f4f runnable "GC task thread#3 (ParallelGC)" os_prio= tid=0x00007f2234063800 nid=0x2f50 runnable "VM Periodic Task Thread" os_prio= tid=0x00007f22341ed800 nid=0x2f59 waiting on condition JNI global references: "GC task thread#2 (ParallelGC)" os_prio= tid=0x00007f2234061800 nid=0x2f4f runnable "GC task thread#3 (ParallelGC)" os_prio= tid=0x00007f2234063800 nid=0x2f50 runnable "VM Periodic Task Thread" os_prio= tid=0x00007f22341ed800 nid=0x2f59 waiting on condition JNI global references: [root@iZwz9gs2zseivevv1k5vnkZ syp]# jstack | grep 2f50 -A
"GC task thread#3 (ParallelGC)" os_prio= tid=0x00007f2234063800 nid=0x2f50 runnable "VM Periodic Task Thread" os_prio= tid=0x00007f22341ed800 nid=0x2f59 waiting on condition JNI global references:

参考:

https://blog.csdn.net/moranzi1/article/details/89341480

java进程CPU高分析的更多相关文章

  1. JAVA进程CPU高的解决方法

    无限循环的while会导致CPU使用率飙升吗?经常使用Young GC会导致CPU占用率飙升吗?具有大量线程的应用程序的CPU使用率是否较高?CPU使用率高的应用程序的线程数是多少?处于BLOCKED ...

  2. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  3. (转)Linux下java进程CPU占用率高-分析方法

    Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

  4. Linux下java进程CPU占用率高分析方法(一)

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  5. Linux下java进程CPU占用率高-分析方法

    今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%  mem:14.6%  ...

  6. Java进程CPU使用率高排查

    Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> ...

  7. 排查java进程cpu占用高的问题

    一.思路 分两步,主要是找出占用cpu高的进程,再找出该进程内到底是哪个线程占用cpu高. 二.找出占用cpu高的进程 参考: https://blog.csdn.net/hfhwfw/article ...

  8. java问题排查工具之一板斧jstack——使用 jstack 定位 java进程CPU过高的问题

    jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: jstack [option] pid jstack [option] executable core jstack [opt ...

  9. Linux 下定位java应用 cpu高的原因(转)

    使用场景: 遇到Linux下java应用cpu占用很高的时候,我们很想知道此时的应用到底在做什么导致资源的消耗. 方便我们进一步定位和优化~ 1.查询cpu耗用top5的进程(你也可以top10) [ ...

随机推荐

  1. 使用 kubeadm 安装 kubernetes v1.16.0

    近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系           统:CentOS Linux release 7.6 Docke ...

  2. shell基础之一

    Shell脚本自动化管理系统的必备基础: vim编辑器的熟练使用,SSH终端及“.vimrc”的设置等等需要熟悉. 命令基础:Linux的150个常用命令的熟练使用 Linux的正则表达式以及三剑客( ...

  3. 关于使用express作为spa应用服务的问题

    前端工程师应该知道,spa是基于前端路由的单页面应用,如果服务端不做相应的配置,会经常出现404的问题. 一般的做法是默认返回应用的首页. express // 安装相关依赖 npm install ...

  4. curl_setopt(ch, option, value)函数上传文件

    bool curl_setopt ( resource $ch , int $option , mixed $value ) 为给定的cURL会话句柄设置一个选项 详细介绍请到:http://www. ...

  5. UmUtils得到友盟的渠道号

    import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm ...

  6. WEditor使用方法

    APP的定位方式有: 1. Appium Desktop工具里的Inspector 2. /tools/bin/uiautomatorviewer.bat 最近发现在一个更好用的定位工具: Wedit ...

  7. 从源码看 Vue 中的 Mixin

    最近在做项目的时候碰到了一个奇怪的问题,通过 Vue.mixin 方法注入到 Vue 实例的一个方法不起作用了,后来经过仔细排查发现这个实例自己实现了一个同名方法,导致了 Vue.mixin 注入方法 ...

  8. kubernetes架构(2)

    一.Kubernetes 架构: Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. Master 节点 Master 是 Ku ...

  9. delphi treeview的子节点图标?

    代码实现不同的子节点图标效果. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

  10. React Native项目实战

    算是学习React Native的一次项目总结吧,目的还是提高自己. 包含的内容: 1>仿"美团"页面的实现; 2>封装项目中和自己常用的一些组件; 3>学习别人 ...