写点什么

CPU 高负载排查小技巧

  • 2019-11-21
  • 本文字数:1073 字

    阅读完需:约 4 分钟

CPU高负载排查小技巧

服务优化是一个细心、漫长的过程,一个很小的优化不仅可以为用户带来更稳定更快速的互联网体验,也许还会为公司降低百万以上的成本。熟练掌握服务端排错技巧,已经是“匠心工程师”的标配技能。这篇 CPU 排错小技巧,希望能够帮助到大家。

前言

为了能够支撑大并发并且合理的利用机器资源,一台服务器部署了 n 个 tomocat 的 java 微服务、或者是同时开启了多个端口的 fastcgi,这些其实都是很正常的操作。但是往往会出现某一个实例的某个方法的执行,导致 cpu 负载非常高从而引发报警。当然,很多同学的第一想法就是“扩容”,于是便找到 OPS 的兄弟“给我扩 xx 台机器”,浪费了资源先不说,但是这样往往解决不了实质性的问题,毕竟不是可以无限扩容机器的。那么我们怎么排查此类问题做好优化工作呢?今天就给大家举例说明,希望同学们 get 这个小技能后多多使用,不断磨练自己的程序,说不定你的耐心优化,就会为公司节省 1 个亿的小目标!


步骤

步骤一:找到最耗 CPU 的进程

工具:top


方法:


1.执行 top -c ,显示进程运行信息列表;


2.键入 P (大写 p),进程按照 CPU 使用率排序;



如上图,最耗 CPU 的进程 PID 为 18154

步骤二:找到最耗 CPU 的线程

工具:top


方法:


1.top -Hp 18154 ,显示一个进程的线程运行信息列表


2.键入 P (大写 p),线程按照 CPU 使用率排序



如上图,进程 18154 内,最耗 CPU 的线程 PID 为 15259

步骤三:将线程 PID 转化为 16 进制

工具:printf


方法:



如上图,15259 对应的 16 进制是 0x3b9b,当然,这一步可以用计算器


之所以要转化为 16 进制,是因为堆栈里,线程 id 都是用 16 进制表示的。

步骤四:查看堆栈,找到线程在干嘛

工具:pstack/jstack/grep


方法:jstack -F 15259 | grep ‘0x3b9b’


1.打印进程堆栈


2.通过线程 id,过滤得到线程堆栈



如上图,找到了耗 CPU 高的线程对应的线程名称“main”方法,以及看到了该线程正在执行代码的堆栈。

步骤五:打印的结果看起来不是很明显,那我们就直接 jstack 写到文件

工具:jstack


方法:jstack -l 15259 > 15259.stack


1.打印进程堆栈


2.通过线程 id 找到 15259.stack,然后通过 0x3b9b 搜索


总结

服务优化是一个细心、漫长的过程,一个很小的优化不仅可以为用户带来更稳定更快速的互联网体验,也许还会为公司降低百万以上的成本。熟练掌握服务端排错技巧,已经是“匠心工程师”的标配技能。这篇 CPU 排错小技巧,希望能够帮助到大家,多用多用,体会一下系统调优的乐趣。最后附上一张图,每个系统排错、优化的命令等待着你去发掘。



本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/jGVXXncEZ1gFBb3pINhRRg


2019-11-21 23:461306

评论

发布
暂无评论
发现更多内容

API面临哪些风险,如何做好API安全

德迅云安全杨德俊

Klocwork 2024.1新功能详解:验证平台功能提升、分析Bazel构建项目、MISRA C++:2023®编码标准

龙智—DevSecOps解决方案

klocwork perforce 静态代码分析工具

智算引领 AI启航,中国电信天翼云助推辽宁数智发展!

天翼云开发者社区

人工智能 云计算

职场火焰杯测试开发大赛报名倒计时:最后一天!

测吧(北京)科技有限公司

测试

英伟达一季净利暴增 6 倍;消息称 TikTok 计划本周大幅裁员丨 RTE 开发者日报 Vol.210

声网

谈谈天翼云VPCE

天翼云开发者社区

云计算 VPC终端节点

在 Django 中设计爬虫系统的数据模型与多对多关系

我再BUG界嘎嘎乱杀

Python django 爬虫

Python打包成exe的方法介绍

我再BUG界嘎嘎乱杀

Python 后端 开发 打包exe

1688商品API接口:电商数据自动化的新引擎

Noah

国内唯一!阿里云荣膺MongoDB“2024年度DBaaS认证合作伙伴奖”

阿里云瑶池数据库

mongodb 阿里云 阿里云瑶池数据库

前端常见的页面自适应布局方案

秃头小帅oi

穿越周期!天翼云laaS+PaaS全年市场份额跃居中国公有云市场第三!

天翼云开发者社区

云计算 云服务 IDC

云内GSLB技术及应用场景

天翼云开发者社区

云计算 容灾备份

虚拟ECU:汽车空调压缩机控制系统

DevOps和数字孪生

虚拟ECU 汽车行业

数字先锋| 塞上江南新面貌:惠企便民政务兴!

天翼云开发者社区

云计算 云服务 政务云

使用 Django 中的 filter 方法进行数据查询

我再BUG界嘎嘎乱杀

Python django 后端 开发

面向对象变成VS函数式编程

FunTester

自动化运维实战:Docker与TASKCTL在ETL调度中的深度应用

敏捷调度TASKCTL

运维 自动化运维 TASKCTL #docker

迭代器的一些简单理解

不在线第一只蜗牛

迭代 迭代器

虚幻引擎5与Perforce Helix Core集成使用案例:打造AAA级科幻游戏《Project Vesperi》

龙智—DevSecOps解决方案

版本控制 游戏开发 Perforce Helix Core

职场火焰杯测试开发大赛报名倒计时:最后一天!

测试人

软件测试

一条数据包从收到发--交换芯片篇(一)

天翼云开发者社区

云计算 架构 交换芯片

总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM技术优化

JackJiang

即时通讯;IM;网络编程

CPU高负载排查小技巧_文化 & 方法_HULK_InfoQ精选文章