服务器cpucpu怎么时高时低低,怎么定位代码

安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&gdb/gcc/makefile(24)
linux/unix(99)
功能问题,通过日志,单步调试相对比较好定位。
性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。
58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助。
某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。
问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?
步骤一、找到最耗CPU的进程
执行top -c&,显示进程运行信息列表
键入P&(大写p),进程按照CPU使用率排序
如上图,最耗CPU的进程PID为10765
步骤二:找到最耗CPU的线程
top -Hp 10765&,显示一个进程的线程运行信息列表
键入P&(大写p),线程按照CPU使用率排序
如上图,进程10765内,最耗CPU的线程PID为10804
步骤三:将线程PID转化为16进制
工具:printf
方法:printf “%x\n” 10804
如上图,10804对应的16进制是0x2a34,当然,这一步可以用计算器。
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。
步骤四:查看堆栈,找到线程在干嘛
工具:pstack/jstack/grep
方法:jstack 10765 | grep ‘0x2a34’ -C5 --color
打印进程堆栈
通过线程id,过滤得到线程堆栈
如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。
希望对经常进行线上CPU问题排查的同学有帮助,如果有更好的实践,也欢迎分享。
想要印象深刻,请大家务必线上实操练习哟。
如果有收获,帮转哈。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:530341次
积分:7488
积分:7488
排名:第3093名
原创:134篇
转载:617篇
评论:21条
(6)(45)(24)(27)(21)(46)(57)(24)(11)(13)(14)(14)(31)(19)(105)(57)(33)(13)(39)(18)(4)(26)(9)(1)(1)(2)(2)(1)(3)(3)(5)(3)(8)(9)(14)(5)(14)(16)(21)(3)(1)(1)(2)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'功能问题,通过日志,单步调试相对比较好定位。
性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。
58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助。
某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。
问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?
步骤一、找到最耗CPU的进程
-c&,显示进程运行信息列表
键入P&(大写p),进程按照CPU使用率排序
如上图,最耗CPU的进程PID为10765
步骤二:找到最耗CPU的线程
top -Hp 10765&,显示一个进程的线程运行信息列表
键入P&(大写p),线程按照CPU使用率排序
如上图,进程10765内,最耗CPU的线程PID为10804
步骤三:将线程PID转化为16进制
工具:printf
方法:printf
“%x\n” 10804
如上图,10804对应的16进制是0x2a34,当然,这一步可以用计算器。
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。
步骤四:查看堆栈,找到线程在干嘛
工具:pstack/jstack/grep
方法:jstack
10765 | grep ‘0x2a34’ -C5 --color
打印进程堆栈
通过线程id,过滤得到线程堆栈
如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。
希望对经常进行线上CPU问题排查的同学有帮助,如果有更好的实践,也欢迎分享。
想要印象深刻,请大家务必线上实操练习哟。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:53338次
积分:1312
积分:1312
排名:千里之外
原创:60篇
转载:82篇
(2)(1)(7)(17)(10)(6)(9)(13)(19)(10)(14)(22)(7)(1)(2)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'上图给各位看看。之前块主板坏了,搞了块昂达的NF4S主块来用。就出现这种情况:原本2。2G的U才变成1G的,后来我发觉核心总线的大小跟着电压高低而定。有时倍频5就是1G。倍频9就是1。8G。。。。11的倍频是正常的。郁闷,真不知道如何才能稳定下来,请各位高手帮帮忙。评论评论评论请求解决方法。谢谢!!!!!
春天我把玉米埋在土里,到了秋天我就会收获很多玉米。春天我把老婆埋在土里,到了秋天我就会…被枪毙!
.cn/images/bbs4/logo/.jpg
进电源管理&把袖珍模式&改为&桌面模式
淡定淡定。。。。
应该是开启了C&Q吧。。关掉就行了
http://bbs.sxzc.net/UpFile/UpAttachment/.jpg
&AMD的冷又静
好几天没上了,等下试试。谢谢各位了
春天我把玉米埋在土里,到了秋天我就会收获很多玉米。春天我把老婆埋在土里,到了秋天我就会…被枪毙!
.cn/images/bbs4/logo/.jpg
进BIOS关掉C&Q
您需要登录后才可以发帖
其他登录方式:一次服务器CPU占用率高的定位分析 - 简书
一次服务器CPU占用率高的定位分析
通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的。幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有对服务造成影响。随着上次我们找到那个吃IO的罪犯,这次我们要追捕的是潜伏在团体中的特务,更加惊险刺激哟!
用top命令很容易定位到是谁占用CPU最高。
top命令定位CPU最高进程
以我们的这个业务进程(imDevServer)举例,为什么说这货是个潜伏者呢?因为这是个多线程的进程,我们要知道实际上占用cpu的最小单位是线程,所以肯定是众线程中的某一个或几个占用CPU过高导致的。再用top -H -p pid命令查看进程内各个线程占用的CPU百分比。
top -H -p pid命令,查看进程中线程占用的CPU百分比
如上图所示我们可以看出id为8863的线程cpu占用率最高。好,我们现在只要能找到他偷走的cpu就好了,虽然这小子嘴巴严,但是我们有一套完善的审问流程,不怕他不招。首先出马的是strace -T -r -c -p pid命令
strace -T -r -c -p pid命令
它的作用是查看系统调用和花费的时间,epoll_wait虽然占用的调用时间多,但是他本身是个正常的阻塞调用。我们接着让pstack pid出马
pstack pid出马
可以看到每个线程的调用堆栈,找到已经找出的占用CPU最高的那个线程,然后看他的调用堆栈,很容易看出在哪一步逻辑上导致了busy loop,再使用trace -p tid看看线程的调用过程接着定位到代码,修复bug,找回被偷走的cpu。
做一个比较注重实际工作的有用的人

我要回帖

更多关于 cpu温度时高时低 的文章

 

随机推荐