| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> CPU过载、内存溢出分析 -> 正文阅读 |
|
[Java知识库]CPU过载、内存溢出分析 |
CPU过载、内存溢出问题一般出现在线上项目中,因为开发环境用户量和数据量都很小,即使你的代码有问题也不会爆发出来。线上出现这样的问题是比较严重的,需要认真对待,妥善解决。 问题原因造成这样问题有两个大类型的原因: jstack排查cpu使用问题步骤: 2.查看高负载进程下的高负载线程:top -Hp 【PID】 (或 ps -mp PID -o THREAD,tid,time) 3.找出最高占用的线程并记录thread_id,把线程号 进行换算成16进制编号:printf ‘0x%x’ thread_id jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈,应该如何找? 在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x4b89的线程调用栈中,得到这个信息,就可以检查对应的代码是否有问题。 通过thread dump分析线程状态除了上述的分析,大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等等。 除了上述的分析,大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等等。 在dump中,线程一般存在如下几种状态:详细可以看这篇文章线程的几种状态 1、RUNNABLE,线程处于执行中 2、BLOCKED,线程被阻塞 3、WAITING,线程正在等待 实例1:多线程竞争synchronized锁 1、locked <0x000000076bf62208>说明线程1对地址为0x000000076bf62208对象进行了加锁; 2、waiting to lock <0x000000076bf62208>说明线程2在等待地址为0x000000076bf62208对象上的锁; 3、waiting for monitor entry [0x000000001e21f000]说明线程1是通过synchronized关键字进入了监视器的临界区,并处于"Entry Set"队列,等待monitor ## 实例2:通过wait挂起线程
dump结果 线程1和2都处于WAITING状态 1、线程1和2都是先locked <0x000000076bf62500>,再waiting on <0x000000076bf62500>,之所以先锁再等同一个对象,是因为wait方法需要先通过synchronized获得该地址对象的monitor; 2、waiting on <0x000000076bf62500>说明线程执行了wait方法之后,释放了monitor,进入到"Wait Set"队列,等待其它线程执行地址为0x000000076bf62500对象的notify方法,并唤醒自己 jastat命令除了线程以外的堆栈信息,我们还可以通过jstat命令查看内存情况 jstat -gc pid 垃圾回收统计
jstat -gcutil pid 总结垃圾回收统计
3、jstat -gcnew pid 新生代垃圾回收统计
暂列以上几个,更多可以参考这篇文章jstat命令详解, |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:06:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |