linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高
一、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).
原文:https://www.cnblogs.com/wu-wu/p/11923250.html
linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高相关推荐
- Java占Linux超过xms,linux下分析java程序占用CPU、内存过高
一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...
- linux下查找java进程占用CPU过高原因
linux下查找java进程占用CPU过高原因 1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu. 2.查找线程 使用top -H -p &l ...
- linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们. Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...
- linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc
实用文案 标准文档 Linux内核空间与用户空间通信机制的研究 Linux kernel space and user space communication mechanism 摘 要 Linux ...
- linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...
级别: 初级 燚 杨 (), 计算机科学硕士 2006 年 2 月 16 日 本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数.模块参数 ...
- Linux 基础知识(2)---Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
Linux内核空间内存申请函数kmalloc.kzalloc.vmalloc的区别 kzalloc与kmalloc区别 这个函数就是原来的两个函数的整合 , 即原来我们每次申请内存的时候都会这么 ...
- Java程序占用 CPU 过高怎么排查
Java程序占用 CPU 过高怎么排查 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅 ...
- linux内核空间内存动态申请
参考:<linux设备驱动开发详解>华清远见 ,--人民邮电出版社 用户空间内存动态申请 在用户空间动态申请内存的函数为 malloc(),这个函数在各种操作系统上的使用是一致的,mall ...
- linux内核_Linux驱动编程的本质就是Linux内核编程
由于Linux驱动编程的本质属于Linux内核编程,因此我们非常有必要熟悉Linux内核以及Linux内核的特点. 这篇文章将会帮助读者打下Linux驱动编程的基础知识. 本篇文章分为如下三个小节进行 ...
最新文章
- 微信小程序左上角返回按钮跳转到指定页面
- Django之初步实现登录功能,APP及ORM
- react 和 lodash 完美结合命令
- const的用法,特别是用在函数前面与后面的区别
- OPENCV图像变换-1
- MVC表示层框架——Velocity技术
- (转)Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
- 「leetcode」78. 子集【回溯算法】详解!
- 两个常见小故障的修复
- Python——python3的requests模块的导入
- 计算机技术中储存容量最大的单位,计算机中最大单位是什么
- 怎么给word文档注音_如何给Word文档中的汉字加拼音?一键加拼音超级方便
- HCIA~广域网技术
- 【JAVA之NIO框架介绍】
- 如何清理Linux跟下的垃圾文件
- 发布上线前,先小秀一把俺的64位浏览器,速度那觉对是杠杠滴,上youtube,上google不费劲
- BASH比较两位数大小
- 我的高中时代--2013春节回高中母校有感(时间是2013春节)
- 将行政区划代码转换为SQL的简便做法
- 科技爱好者周刊(第 183 期):腾讯的员工退休福利
热门文章
- 童话镇计算机乐谱,童话镇简谱(歌词)-陈一发演唱-桃李醉春风记谱
- java中Mark接口_JVM源码分析之Java对象头实现
- Hike on a Graph HDU - 1252(bfs)
- D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
- python统计分析 --- 1.方差分析、t检验
- 如果让我重做一次研究生--王泛森院士
- XML文件中url路径中失效解决办法
- linux脚本变量运算符,linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)...
- 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)
- [机器学习] LightGBM并行计算算子具体实现