面试官:线上服务器CPU占用率高如何排查定位问题?
副标题[/!--empirenews.page--]
国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题、编程语言熟练程度、Debug、系统设计和性能优化。 解决问题的能力以超高比例排名第一,这也是为什么很多面试过程中,面试官都喜欢问如下问题:
这些,都是比较常见的问题,还有一些比较具体的问题也是建议很多开发者都需要掌握的,如:
这些问题的回答,一方面考察了面试者是否具有很强的实战经验,另外一方面也能体现出其解决问题的能力。 毋庸置疑,作为开发人员来说,定位并解决问题的能力是至关重要的。因为一旦线上发生了问题,如CPU占用率高,如果不及时解决,很容易导致网站响应慢、服务器宕机等问题。 那么,书归正传,本文我们就来简单介绍一下,如果线上服务器发生CPU占用率过高的问题时,应该如何排查并定位问题。 1、问题发现 本文整理自一个真实的案例,是楼主负责的业务,在一次大促之前的压测时发现了这个问题。 在每次大促之前,我们的测试人员都会对网站进行压力测试,这个时候会查看服务的cpu、内存、load、rt、qps等指标。 在一次压测过程中,测试人员发现我们的某一个接口,在qps上升到500以后,CPU使用率急剧升高。 CPU利用率,又称CPU使用率。顾名思义,CPU利用率是来描述CPU的使用情况的,表明了一段时间内CPU被占用的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。 2、问题定位 遇到这种问题,首先是登录到服务器,看一下具体情况。 定位进程 登录服务器,执行top命令,查看CPU占用情况:
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 通过以上命令,我们可以看到,进程ID为1893的Java进程的CPU占用率达到了181%,基本可以定位到是我们的Java应用导致整个服务器的CPU占用率飙升。 定位线程 我们知道,Java是单进程多线程的,那么,我们接下来看看PID=1893的这个Java进程中的各个线程的CPU使用情况,同样是用top命令:
通过top -Hp 1893命令,我们可以发现,当前1893这个进程中,ID为4519的线程占用CPU最高。 定位代码 通过top命令,我们目前已经定位到导致CPU使用率较高的具体线程, 那么我么接下来就定位下到底是哪一行代码存在问题。 首先,我们需要把4519这个线程转成16进制:
接下来,通过jstack命令,查看栈信息:
通过以上代码,我们可以清楚的看到,BeanValidator.java的第30行是有可能存在问题的。 3、问题解决 (编辑:四平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Windows Workstation或Server上强制同步时间?
- 如何在Debian/Ubuntu上设置自动安全更新(无人值守更新)
- windows-server-2003 – 如何安排任务在Windows Server 200
- 如何检查多个远程Linux系统是否打开了指定端口?
- Windows 10任务管理器妙用:一招变回Windows 7小工具
- 相比 Windows 为什么越来越多人选择Linux?
- active-directory – 如果DC处于脱机状态,Windows域客户端的
- 下一代Windows 10是怎样的 带你提前体验
- 开源,基础软件更好的商业模式
- 华为鸿蒙的机会与挑战:若被谷歌服务禁用,将启用鸿蒙?
- 在技术团队里,如何达成DevOps共识?落地好难
- 如何在Windows 10上启用“现在可以安全地关闭计算
- Windows 10:如何在Word中粘贴没有格式化的文本
- windows-xp – 如何在Windows中创建文件的多个编
- pack.wsf wsh下的js加密工具新浪也在用
- 如何在Windows Phone 8(C#)框架中添加C DLL
- 如何在Windows 10中增强文本光标和鼠标指针
- windows-server-2008 – “用户帐户无权运行此任
- windows-server-2008 – 如何从Windows Server 2
- windows-server-2003 – 可以使Robocopy跳过打开