一、CPU过高分析

1)使用TOP命令查看CPU、内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比。其中CPU状态中标示id的为空闲CPU百分比。当空闲CPU百分比越低,说明CPU占用率越高。

2)目前针对Linux下java进程占用CPU高的分析手段主要为使用linux命令查出高CPU使用的进程,前分析其是由于进程原因还是系统原因,在分析出为进程消耗过高CPU后列出占用CPU高和占用时间最长的线程并使用jdk自带的jstack工具进行分析CPU使用分析。

jstack命令

通过top命令定位到cpu占用率较高的线程之后,继续使用jstack pid命令查看当前java进程的堆栈状态

参数说明:

-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent 的 ownable synchronizers列表.

-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息

-m 打印java和native c/c++框架的所有栈信息.

-h | -help 打印帮助信息

jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈,应该如何找?在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x246c的线程调用栈中,发现该线程一直在执行JstackCase类第33行的calculate方法,得到这个信息,就可以检查对应的代码是否有问题。

通过thread dump分析线程状态:除了上述的分析,大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等。在dump中,线程一般存在如下几种状态:1、RUNNABLE,线程处于执行中2、BLOCKED,线程被阻塞3、WAITING,线程正在等待实例1:多线程竞争synchronized锁

很明显:线程1获取到锁,处于RUNNABLE状态,线程2处于BLOCK状态1、locked <0x000000076bf62208>说明线程1对地址为0x000000076bf62208对象进行了加锁;2、waiting to lock <0x000000076bf62208> 说明线程2在等待地址为0x000000076bf62208对象上的锁;3、waiting for monitor entry [0x000000001e21f000]说明线程1是通过synchronized关键字进入了监视器的临界区,并处于"Entry Set"队列,等待monitor。

二、内存过高分析

使用pmap查看进程内存

命令格式:

pmap 进程id

第一列。内存块起始地址

第二列。占用内存大小

第三列,内存权限

第四列。内存名称。anon表示动态分配的内存,stack表示栈内存

最后一行。占用内存总大小,请注意,此处为虚拟内存大小,占用的物理内存大小能够通过top查看

使用jmap查看Java进程对象使用情况

命令格式:

jmap -histo 进程id

第一列,序号。

第二列,对象实例数量

第三列,对象实例占用总内存数。单位:字节

第四列,对象实例名称

最后一行,总实例数量与总内存占用数

使用jstat查看Java内存分布及回收情况

通常运行命令如下:

jstat -gc 15712 5000

即会每5秒一次显示进程号为15712的java进成的GC情况,

- S0C: Young Generation第一个survivor space的内存大小 (kB).

- S1C: Young Generation第二个survivor space的内存大小 (kB).

- S0U: Young Generation第一个Survivor space当前已使用的内存大小 (kB).

- S1U: Young Generation第二个Survivor space当前已经使用的内存大小 (kB).

- EC: Young Generation中eden space的内存大小 (kB).

- EU: Young Generation中Eden space当前已使用的内存大小 (kB).

- OC: Old Generation的内存大小 (kB).

- OU: Old Generation当前已使用的内存大小 (kB).

- MC: Permanent Generation的内存大小 (kB)

- MU: Permanent Generation当前已使用的内存大小 (kB).

- YGC: 从启动到采样时Young Generation GC的次数

- YGCT: 从启动到采样时Young Generation GC所用的时间 (s).

- FGC: 从启动到采样时Old Generation GC的次数.

- FGCT: 从启动到采样时Old Generation GC所用的时间 (s).

- GCT: 从启动到采样时GC所用的总时间 (s).

linux下分析Java程序内存汇总

使用pmap查看进程内存 执行命令 使用pmap能够查看某一个进程(非java的也能够)的内存使用使用情况, 命令格式: pmap 进程id 演示样例说明 比如执行: pmap 12358 显示结果例 ...

linux下查找java进程占用CPU过高原因

1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu.   2.查找线程 使用top -H -p 查看线程占用情况   3. ...

Linux下执行Java程序报错

在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量 ...

为什么Java程序占用的内存比实际分配给它的要多

很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...

Java程序占用实际内存大小

很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...

Java程序占用的内存可能会大于Xmx

很多人认为Xmx和-Xms参数指定的就是Java程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素. 除了堆,影响Java程序所占用内存的因 ...

如何使用加多宝&lpar;jdb&rpar;在linux下调试Java程序

毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb windows里是这样的 Linux下是这样的 一般我在linu ...

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

windows下揪出java程序占用cpu很高的线程

背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...

随机推荐

Jackson轻易转换JSON

原文http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html Jackson可以轻松的将Java对象转换成json对象和xml文档,同样 ...

用WPF实现查找结果高亮显示

概述 我们经常会遇到这样的需求:到数据库里查找一些关键字,把带这些关键字的记录返回显示在客户端上.但如果仅仅是单纯地把文本显示出来,那很不直观,用户不能很轻易地看到他们想找的内容,所以通常我们还要做到 ...

使用gulp进行React任务的构建

如果你不熟悉gulp的操作,可以看下下面的教程: gulp学习笔记1 gulp学习笔记2 gulp学习笔记3 gulp学习笔记4 对于gulp在react中的构建,找了很多资料,看了很多文章,也根据文 ...

MyBatis知多少(14)分散的数据库系统

任何一个重要的数据库无疑都会拥有不止一个依赖者.即使该数据库只是简单地被两个Web 应用程序所共享,也有许多事情需要考虑.假设有一个名为网上购物车的Web应用程序,它使用了一个包含类别代码的数据库.就 ...

MySQL之终端&lpar;Terminal&rpar;管理MySQL

原文:MySQL之终端(Terminal)管理MySQL 前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作 ...

计算两个date类型的时间差

//两个时间之间分钟差 public static int compareDate(Date d1, Date d2) {        // TODO Auto-generated method s ...

修改(同步)linux时间

新申请下来的机器的时间现在我们所在的时区不一致,需要同步成东八区 查看当前的时间: date -R; date +%z 修改时区: cp /usr/share/zoneinfo/Asia/Shangh ...

&lbrack;心得&rsqb; 如何利用liquibase進行資料庫版本控制 - 基礎觀念

前言 - 會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合 比較沒有單純利用command進行的流程.也沒有整體觀念的介紹,所以將我所理解的整理分享給大家. ...

uniGUI试用笔记(七)

uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中.服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Exce ...

jqgrid 对编辑行填写的内容做格式验证

有时,我们需要在基于jqgrid表格编辑行的单元格做规范验证.jqgrid提供有支持,通过设置字段的editrules属性来约束格式. 约束方式: 1.内置的约束参数 (required: true, ...

Java占Linux超过xms,linux下分析java程序占用CPU、内存过高相关推荐

  1. linux查看native进程,Android 分析应用程序占用native内存

    Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小:然而Native 内存并不能在虚拟堆上看到:Android系统基于Linux,这样的话其具备Linux的大多数特性: ...

  2. Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05

    文章目录 找出占用CPU/内存过高的进程 1. 脚本 2. 运行脚本 3. 效果图 找出占用CPU/内存过高的进程 1. CPU 过高的进程2. 内存 过高的进程 1. 脚本 #/bin/bash e ...

  3. linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  4. deepin(深度linux)dde-dock系统监控小插件(网速CPU内存)

    转载自deepin(深度linux)dde-dock系统监控小插件(网速CPU内存),仅用作个人学习备份,Mark一下 花了一周时间,研究了dde-dock官方插件开发文档和sonichy大神的项目, ...

  5. weblogic占用java_weblogic下java程序占用cpu过高的问题排查

    1.cpu使用情况如图: 2.执行命令 :jstack 126624 > cpu1112.log   (注意执行此命令时的用户需为执行进程的用户,所以此处需要用weblogic用户) 若执行此命 ...

  6. weblogic下java程序占用cpu过高的问题排查

    1.cpu使用情况如图: 2.执行命令 :jstack 126624 > cpu1112.log   (注意执行此命令时的用户需为执行进程的用户,所以此处需要用weblogic用户) 若执行此命 ...

  7. java程序占用实际内存大小

    一.java程序占用实际内存大小 1.1.java命令启动参数-Xms -Xmx的问题         启动命令如下:java -server -Xms128m -Xmx128m -jar ****. ...

  8. kprobe分析内核kworker占用CPU 100%问题总结

    kprobe分析内核kworker占用CPU 100%问题总结 Create by Billow.Jen,2020.3.8 前言 利用linux kernel 动态追踪技术,排查问题本身就可能会变成一 ...

  9. 基于Python分析深圳程序员工资有多高?

    基于Python分析深圳程序员工资有多高? 概述 前言 统计结果 爬虫技术分析 爬虫代码实现 爬虫分析实现 后记 前言 多图预警.多图预警.多图预警.校招季,毕业也多,跳槽也多.我们的职业发展还是要顺 ...

最新文章

  1. Scala分支控制 if-else之单分支的使用
  2. C++设计模式--工厂方法模式
  3. 农历控件源码(C#)
  4. mendelay为什么安装不了_你为什么消防验收过不了?消防管道安装错误图集
  5. synchronized 和 reentrantlock 区别是什么_JUC源码系列之ReentrantLock源码解析
  6. vue如何获取tree当前选中的节点_vue中element-ui 树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)...
  7. 10个 Python 工程师,9个不合格!!
  8. linux下如何为redis配置path,linux环境下如何启动redis
  9. SpringCache 集成 Redis,这才是优雅的缓存解决方案!
  10. python里hist图状图_直方图中具有阶梯填充histtype的matplotlib散点图hist
  11. Android ListView下拉刷新时卡的问题解决小技巧
  12. JAVA基础——设计模式之观察者模式
  13. matlab图像处理Lena大作业
  14. 语音合成1700多个中文音频
  15. Unity游戏开发:背包系统的实现
  16. dubbo异常源码分析处理
  17. paradigm画时序图 visual_Visual Paradigm使用技巧:从用户故事中生成序列图
  18. day03 Http协议Request
  19. c语言函数传递坐标值,C语言中,函数间数据传递的方式有三种,即用返回值、参数、全局变量。...
  20. C语言编程>第三周 ④ 求100之内的素数。

热门文章

  1. android view 平滑,Android移动view动画问题(让移动更平滑)
  2. SpringMVC测试框架(转载)
  3. librdkafka介绍文档
  4. Numpy——数组分割
  5. python脚本案例
  6. char *p=new char
  7. 八皇后问题程序及注解
  8. lu分解法matlab_MIT 18.065—机器学习中的矩阵方法02 矩阵乘法与矩阵分解
  9. 【分享】具有“魔性”的通用软件开发框架
  10. CSS3混合模式mix-blend-mode/background-blend-mode简介 ,PS中叠加效果