记一次排查CPU高的问题
2023-04-18 12:36:20 时间
背景
将log4j.xml的日志级别从error调整为info后,进行压测发现CPU占用很高达到了90%多(之前也就是50%,60%的样子).
问题排查
排查思路: 看进程中的线程到底执行的是什么,导致CPU占用较高.
1. 使用top命令查看到底是哪个应用占用的cpu比较高
左边的图是日志级别为info CPU较高的服务器, 右边为输出级别为error cpu正常的服务器.
2. 使用top -Hp pid 命令查看进程中的线程
可以看到左边运行中的线程比右边要多(实际上左边运行状态的线程常态为30左右),接下来通过jstack命令查看这些线程到底在做什么
3. 将步骤2 找到的线程的pid 使用printf %x pid 转换为16进制,第四步使用
4. 使用jstack命令查找这个线程到底在做什么
jstack [进程]|grep -A 10 [线程的16进制]
示例: jstack 21125|grep -A 10 52f1
-A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。
这时候就可以看到具体线程执行的堆栈信息了, 可以看到有大量的线程都在执行一下的代码:
按照堆栈信息层层追踪找到了关键的属性:
查看配置文件:
该配置配置为true时log4j2将会获取堆栈的快照(snapshot),并遍历堆栈跟踪以查找位置信息,因此会消耗较多的时间.
将该配置关闭,解决了CPU高的问题
总结
排查CPU高的问题的思路:
1. 先查看对应的进程,看看是哪个进程消耗的多
2. 然后再去看进程中的线程到底在执行什么代码.
3.找到了具体执行的代码就可以具体问题具体分析了.
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击