网站首页 > 精选教程 正文
概念
cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100%;我们应该意识到,cpu运行速度很快
飙升原因
频繁GC,当访问量过高时,可能会造成频繁的GC,甚至FGC,内存分配过快,GC线程不停执行
序列化与反序列化,xml文档或word文档解析时
加密、解密
线程上下文切换,阻塞、IO、执行状态变化,锁的竞争激烈
死循环、while(true)
定位概念
查消耗cpu最高的进程PID
top -c:执行top -c ,显示进程运行信息列表。按下P,进程按照cpu使用率排序
top -Hp 3033:显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序
jps
根据PID查出消耗cpu最高的线程号
jstack -l 3033 > ./3033.stack
根据线程号查出对应的java线程,进行处理
cat 3033.stack |grep 'bda' -C 8
解决过程
1.执行“top”命令:查看所有进程占系统CPU的排序。极大可能排第一个的就是咱们的java进程(COMMAND列)。PID那一列就是进程号。
2.执行“top -Hp 进程号”命令:查看java进程下的所有线程占CPU的情况。
3.执行“printf "%x\n 10"命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到咱们的线程堆栈信息,咱们需要把线程号转成16进制。例如,printf "%x\n 10-》打印:a,那么在jstack中线程号就是0xa.
4.执行 “jstack 进程号 | grep 线程ID” 查找某进程下-》线程ID(jstack堆栈信息中的nid)=0xa的线程堆栈信息。如果“"VM Thread" os_prio=0 tid=0x00007f871806e000 nid=0xa runnable”,第一个双引号圈起来的就是线程名,如果是“VM Thread”这就是虚拟机GC回收线程了
5.执行“jstat -gcutil 进程号 统计间隔毫秒 统计次数(缺省代表一致统计)”,查看某进程GC持续变化情况,如果发现返回中FGC很大且一直增大-》确认Full GC! 也可以使用“jmap -heap 进程ID”查看一下进程的堆内从是不是要溢出了,特别是老年代内从使用情况一般是达到阈值(具体看垃圾回收器和启动时配置的阈值)就会进程Full GC。
6.执行“jmap -dump:format=b,file=filename 进程ID”,导出某进程下内存heap输出到文件中。可以通过eclipse的mat工具查看内存中有哪些对象比较多。
猜你喜欢
- 2024-12-02 【技术管理】如何给任务排优先级?
- 2024-12-02 Java 应用程序的 CPU 使用率飙升原因分析
- 2024-12-02 八种经典排序算法总结(含动画演示)
- 2024-12-02 计算机入门必备算法——快速排序法
- 2024-12-02 Java 实现汇总排序
- 2024-12-02 经典算法之冒泡排序
- 2024-12-02 拜托,别再问我什么是堆了! 这篇文章让你彻底明白!
- 2024-12-02 推荐一款免费排课软件
- 2024-12-02 腾讯工作7年被裁,3个月逆袭字节跳动,对此我想对大家说
- 2024-12-02 一遍记住 8 种排序算法与 Java 代码实现
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)