JVM 之 Linux定位CPU过高问题及优化
项目部署以后出行卡顿现象,所以对问题进行了排查,记录一下排查过程
(从CSDN编辑器贴过来的,图有水印)
1.找进程
top

可以发现,是Java进程导致的CPU过高,致使系统卡顿
2.找线程
ps -mp pid -o THREAD,tid,time

发现占比最大的线程
3.线程id转换16进制
printf "%x\n" pid

得到6a33,方便下一步排查
4.查询代码位置
jstack pid|grep tid -A 30

发现全是GC线程
5.查看gc频率
jstat -gcutil pid 时间间隔 打印次数

发现Eden很满,不断增长,GC次数过多
6.dump堆文件
jstack pid >>jstack.out

7.查找dump文件
find . -name "jstack.out"
这步可有可无,生成在当前目录


8.IBM Thread and Monitor Dump Analyzer for Java
可视化工具分析dump文件

查看结果还算正常
9.尝试调整JVM参数
查看JVM参数,发现默认才512m
查看系统总内存
cat /proc/meminfo查看linux系统内存大小的详细信息

发现总内存约64G
将-Xmx 最大堆内存设置为1024m,扩大一倍看看
重启服务发现GC频率明显下降,恢复正常,满足以下标准
如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化;如果GC时间超过1〜3 秒,或者频繁G C
,则必须优化。如果满足下面的指标,则一般不需要进行GC: ■ Minor GC执行时间不到50ms; ■ Minor
GC执行不频繁,约10秒一次; ■ Full GC执行时间不到1s; ■ Full GC执行频率不算频繁,不低于10分钟1次。
JVM 之 Linux定位CPU过高问题及优化的更多相关文章
- 【三板斧】Java定位CPU使用高问题
[三板斧]Java定位CPU使用高问题 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H"键,记录高消耗线程号,并将改线程号转换为十六进制 2.使用 js ...
- 轻松定位CPU飙高问题
以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...
- (原创)性能测试中,Oracle服务器定位CPU使用率高的瓶颈(SQL)
本篇博客记录一次性能测试过程中,定位对CPU使用率高的瓶颈问题,主要定位SQL为准 一.用SQL命令定位1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据 ...
- Linux下cpu过高问题排查
原文地址:https://blog.csdn.net/chenjunan888/article/details/80447800 在服务器报cpu过高时,可使用以下命令,快速导出堆栈信息,以方便查看具 ...
- Java定位CPU使用高问题--转载
原文地址:http://www.cnblogs.com/guoyuqiangf8/p/3545687.html 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H&q ...
- 【转载】查看Linux进程CPU过高具体的线程堆栈(不中断程序)
具体的命令经常忘记,毕竟用的不是很多.为了避免去找备份一下 1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 up 850 days, 1:18, 3 users ...
- Oracle服务器定位CPU使用率高的瓶颈(SQL)
1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据时,发现userCPU高达98%!! 保持top的状态下,按shift+p,可以将所有进程按CPU使用率 ...
- 查看Linux进程CPU过高具体的线程堆栈(不中断程序)
转自:http://blog.csdn.net/mergerly/article/details/47731305 1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 ...
- linux查询cpu过高原因--java
1. 查询java pid top -c 2. 查询java进程下,线程情况 top -Hp pid(threadIdList) 3. 将10进制线程id转为16进制 printf "%x ...
随机推荐
- Istio 将被捐赠给开源基金会 | 云原生生态周报 Vol. 47
作者 | 陈俊.徐迪.陈有坤.李鹏.敖小剑 业界要闻 1.Google Cloud CEO 表示将把 Istio 项目捐赠给基金会 Istio 项目找到了理想的发展方向: 捐赠给开源基金会. 2.Ko ...
- GO 使用Webhook 实现github 自动化部署
通常大家开发大部分是本地git push 提交,服务器上git pull 手动更新.git 可以使用webhook实现自动部署.webhook是仓库平台的一个钩子事件,通过hook 钩子监听代码,回调 ...
- centos 7 vscode cmake 编译c++工程
一.环境说明 1)gcc/g++ cmake安装建议 gcc/g++内核自带的即可,如果需要新的自行安装, cmake也一样,如有需要新的版本自行安装. 2)vscode安装插件 必要的插件c/c+ ...
- 编辑器、编译器、文件、IDE等常见概念辨析
一.编辑器与编译器 1.编辑器与编译器有什么区别? 简单讲,编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序.一个现代编译 ...
- [译] 制作 Vue 3 的过程
原文链接: https://increment.com/frontend/making-vue-3 在过去的一年里,Vue 团队一直在研究 Vue.js 的下一个主要版本,我们希望在 2020 年上半 ...
- Condition线程通信_生产者消费者案例
①Condition 接口描述了可能会与锁有关联的条件变量. 这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的 功能. 需要特别指出的是,单个 Lock 可能与 ...
- 05 . Python入门值循环语句
一.Python循环语句 程序一般情况下是按照顺序执行的 编程语言提供了各种控制结构,允许更复杂的执行路径 Python中的循环语句有for和while但没有do while 循环语句允许我们执行一个 ...
- call 和 apply 的区别?哪个性能更好?
1.call 和 apply 都是 function 类 原型上的方法:每一个函数作为 function 的实例都能调用这两个方法:这两个方法执行的目的都是用来改变函数中 this 指向的,让函数执行 ...
- 如何提交本地代码到git仓库
首先要先注册一个自己的GitHub账号,注册网址:https://github.com/join 有了自己的账号以后,就可以进行登录,开始创建一个新的项目 创建一个新的项目,填写项目名称,描述 我是和 ...
- 我的web课堂作业
001 my first page <%@ page language="java" contentType="text/html; charset=UTF-8&q ...