智能体刷屏的背后,是 AI 应用拐点的来临?AICon 北京站议程重磅公布,50+ 硬核分享不容错过 了解详情
写点什么

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:461288

评论

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

Django中的超级用户和自己创建app原来这么简单!

老表

Python django web开发 11月日更 博客系统

敏捷中的威胁建模

刘冉

敏捷开发 威胁建模 安全测试

一分钟搞懂DDD

俞凡

架构 DDD

性能测试之并发模型对比(JMeter,Locust和Gatling篇)

刘冉

软件测试 性能测试 自动化测试

架构实战营模块三作业

spark99

架构实战营

【架构实战营】模块三作业

liu🍊

如何使用Camtasia给视频打码

淋雨

Camtasia

架构实战训练营模块三

人生就是梦

「架构实战营」

测试用例编写和管理

刘冉

软件测试 测试用例

探索式测试落地实践

刘冉

探索测试

Flink 实践教程-入门(6):读取 PG 数据写入 ClickHouse

腾讯云大数据

flink 流计算 Oceanus

服务端系统性能测试

刘冉

性能测试

自定义View:如何实现图片放大后拖动和滑动效果

Changing Lin

11月日更

Java8中Stream初试

Geek_4bdbe1

AI 预测:基于流计算 Oceanus(Flink) 实现病症的实时预测

腾讯云大数据

flink 流计算 Oceanus

Flink 实践教程-入门(7):消费 Kafka 数据写入 PG

腾讯云大数据

flink 流计算 Oceanus

如何使用 JavaScript 扁平化/非扁平化嵌套 JSON 对象?

devpoint

JavaScript json Object 11月日更

契约测试理论篇

刘冉

软件测试 契约测试

我们的敏捷测试实践

刘冉

软件测试 敏捷测试

模块八作业

potti

软件安全测试

刘冉

软件测试 安全测试

springboot中poi操作合集

小鲍侃java

11月日更

点进来,与白洞一起体验一场沉浸式智慧轨道之旅

白洞计划

瀑布vs敏捷质量控制

刘冉

敏捷开发 敏捷测试

北鲲云超算平台对于基因组学研究能够提供哪些帮助?

北鲲云

模块四作业

bob

「架构实战营」

软件测试中的服务虚拟化

刘冉

Mock测试框架 服务虚拟化

学生管理系统设计文档

Geek_cb2b43

2021年了,数据分析还吃香么?

Geek_utwige

Python 最佳实践 数据分析 爬虫 职业发展

数据产品经理实战-数据分析能力养成

第519区

数据分析 数据产品

Python 官方研讨会:彻底移除 GIL 真的可行么?

Python猫

Python

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