window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...
国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下:
排名前几的比较受重视的能力分别为:解决问题、编程语言熟练程度、Debug、系统设计和性能优化。
解决问题的能力以超高比例排名第一,这也是为什么很多面试过程中,面试官都喜欢问如下问题:1、你这个项目遇到的最大挑战是什么?如何解决的?
2、如果线上发生了报警你回如何排查呢?
3、你有解决过什么线上问题吗?
4、能列举几个你知道的排查Linux服务器线上问题的命令吗?
这些,都是比较常见的问题,还有一些比较具体的问题也是建议很多开发者都需要掌握的,如:1、线上服务器Load飙高如何排查?
2、线上服务器CPU占用率高如何排查?
3、线上服务器频繁发生Full GC如何排查?
4、线上服务器发生死锁如何排查?
这些问题的回答,一方面考察了面试者是否具有很强的实战经验,另外一方面也能体现出其解决问题的能力。
毋庸置疑,作为开发人员来说,定位并解决问题的能力是至关重要的。因为一旦线上发生了问题,如CPU占用率高,如果不及时解决,很容易导致网站响应慢、服务器宕机等问题。
那么,书归正传,本文我们就来简单介绍一下,如果线上服务器发生CPU占用率过高的问题时,应该如何排查并定位问题。一、问题发现
本文整理自一个真实的案例,是楼主负责的业务,在一次大促之前的压测时发现了这个问题。
在每次大促之前,我们的测试人员都会对网站进行压力测试,这个时候会查看服务的cpu、内存、load、rt、qps等指标。
在一次压测过程中,测试人员发现我们的某一个接口,在qps上升到500以后,CPU使用率急剧升高。CPU利用率,又称CPU使用率。顾名思义,CPU利用率是来描述CPU的使用情况的,表明了一段时间内CPU被占用的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。二、问题定位
遇到这种问题,首先是登录到服务器,看一下具体情况。
定位进程
登录服务器,执行top命令,查看CPU占用情况:$top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1893 admin 20 0 7127m 2.6g 38m S 181.7 32.6 10:20.26 javatop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
通过以上命令,我们可以看到,进程ID为1893的Java进程的CPU占用率达到了181%,基本可以定位到是我们的Java应用导致整个服务器的CPU占用率飙升。
定位线程
我们知道,Java是单进程多线程的,那么,我们接下来看看PID=1893的这个Java进程中的各个线程的CPU使用情况,同样是用top命令:$top -Hp 1893 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4519 admin 20 0 7127m 2.6g 38m R 18.6 32.6 0:40.11 java
通过top -Hp 1893命令,我们可以发现,当前1893这个进程中,ID为4519的线程占用CPU最高。
定位代码
通过top命令,我们目前已经定位到导致CPU使用率较高的具体线程, 那么我么接下来就定位下到底是哪一行代码存在问题。
首先,我们需要把4519这个线程转成16进制:$printf %x 451911a7
接下来,通过jstack命令,查看栈信息:$sudo -u admin jstack 1893 |grep -A 200 11a7"HSFBizProcessor-DEFAULT-8-thread-5" #500 daemon prio=10 os_prio=0 tid=0x00007f632314a800 nid=0x11a2 runnable [0x000000005442a000] java.lang.Thread.State: RUNNABLE at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:684) at sun.misc.URLClassPath.findResource(URLClassPath.java:188) at java.net.URLClassLoader$2.run(URLClassLoader.java:569) at java.net.URLClassLoader$2.run(URLClassLoader.java:567) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findResource(URLClassLoader.java:566) at java.lang.ClassLoader.getResource(ClassLoader.java:1093) at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232) at org.hibernate.validator.internal.xml.ValidationXmlParser.getInputStreamForPath(ValidationXmlParser.java:248) at org.hibernate.validator.internal.xml.ValidationXmlParser.getValidationConfig(ValidationXmlParser.java:191) at org.hibernate.validator.internal.xml.ValidationXmlParser.parseva lidationXml(ValidationXmlParser.java:65) at org.hibernate.validator.internal.engine.ConfigurationImpl.parseva lidationXml(ConfigurationImpl.java:287) at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:174) at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) at com.test.common.util.BeanValidator.validate(BeanValidator.java:30)
通过以上代码,我们可以清楚的看到,BeanValidator.java的第30行是有可能存在问题的。三、问题解决
接下来就是通过查看代码来解决问题了,我们发现,我们自定义了一个BeanValidator,封装了Hibernate的Validator,然后在validate方法中,通过Validation.buildDefaultValidatorFactory().getValidator()初始化一个Validator实例,通过分析发现这个实例化的过程比较耗时。
我们重构了一下代码,把Validator实例的初始化提到方法外,在类初始化的时候创建一次就解决了问题。
四、总结
以上,展示了一次比较完成的线上问题定位过程。主要用到的命令有:top 、printf 和 jstack
另外,线上问题排查还可以使用Alibaba开源的工具Arthas进行排查,以上问题,可以使用一下命令定位:thread -n 3 //查看cpu占比前三的线程
以上,本文介绍了如何排查线上服务器CPU使用率过高的问题,如果大家感兴趣,后面可以再介绍一些关于LOAD飙高、频繁GC等问题的排查手段。
关于本次问题排查,你有什么想说的呢?欢迎交流。
window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...相关推荐
- 解决Centos服务器/dev/mapper/cl-root或overlay挂载点/根目录磁盘内存满占用率持续高与实际磁盘内存不相符
问题描述: 在开发过程中,发现网页突然开不了,突然断线,诡异的断开又重连.终端连接服务器后,通过输入 df -h [root@ackh-office-srv ~]# df -h 文件系统 容量 已用 ...
- 服务器主体信息截图,puppeteer实现线上服务器任意区域截图
整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...
- window服务器cpu过高的排查_生产服务器CPU占用率过高排查过程
一.问题详情 现象:API接口访问耗时过长,排查发现当前节点内存使用3.9G,CPU占用率295%. 当前节点已两周没发版,怀疑内存没有释放,可能是JVM垃圾回收的问题. 二.排查过程 1.定位问题进 ...
- 面试官:线上服务器CPU占用率高如何排查定位问题?
开发十年,就只剩下这套架构体系了!! 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下:  ...
- linux cpu不足处理运维,Linux运维知识之Linux服务器CPU占用率较高问题排查思路
本文主要向大家介绍了Linux运维知识之Linux服务器CPU占用率较高问题排查思路,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 注意:本文相关配置及说明已在 CentOS ...
- 原创|面试官:线上服务器CPU占用率高如何排查定位问题?
国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...
- 服务器定位cpu高占用率代码php,面试官:线上服务器CPU占用率高如何排查定位问题?,...
面试官:线上服务器CPU占用率高如何排查定位问题?, 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果 ...
- 线上服务器CPU占用率高如何排查定位问题?
(关联着看看这篇文章:https://blog.csdn.net/u011277123/article/details/103768939) 解决问题的能力以超高比例排名第一,这也是为什么很多面试过程 ...
- java检测服务器磁盘空间占满_Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践...
一.问题描述 Linux服务器的配置是4核16G,将war包部署到tomcat后,启动tomcat,发现内存占用率不高,但是CPU一直高达100%:浏览器输入相关url也无法访问该项目,且tomcat ...
最新文章
- http://blog.csdn.net/xingfuzhijianxia/article/details/6433918
- Python实现不规则txt文本数据读取并转换为csv文本
- Altium_Designer-PCB的覆铜步骤
- python闭包详解函数_详解python函数的闭包问题(内部函数与外部函数详述)
- 大数据_Hbase-(概念补充_hbase中namespace的概念)---Hbase工作笔记0007
- 靠知识赚钱只是较高级的体力劳动,靠智慧赚钱才能真正的富有。
- python vba 区别_VBA和Python该学哪个?
- 再分享一个零成本做文库代下载赚钱项目
- 二进制数除法 matlab,MATLAB求出不可约多项式(实现二进制加法、除法)
- SpringBoot文件夹压缩下载实现示例
- Verifying archive integrity... Error in check sums 1981929512 2439459451
- TcaplusDB君 · 行业新闻汇编(7月2日)
- jpa 人大金仓数据库方言_KDC——人大金仓数据库比对工具
- finebi如何使用mysql_如何利用bi数据分析FineBI配置MySQL
- python做一个大鱼吃小鱼_Python精灵模块制作的大鱼吃小鱼游戏
- Allegro PCB编辑界面功能全面介绍图文教程及视频演示
- Lora SX1278芯片 模块引脚的功能介绍
- 遭遇Win32.Loader.c,Trojan.PSW.Win32.GameOnline,Trojan.PSW.Win32.AskTao等1
- 奥利给:力扣160:相交链表
- 开源智能电子名片系统源码 含小程序完整前后端+搭建教程
热门文章
- array.unshift_Ruby中带有示例的Array.unshift()方法
- Java String indexOf(int ch)方法与示例
- ASP.NET 网站项目 EF 的简单操作例子
- 1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二
- 全网最全的Numpy开发入门教程(详细案例版)
- Kubernetes 持久化存储 Cephfs
- centos 6.2安装mysql_CentOS 6.2下安装MySQL_服务器知识学堂-中关村在线
- mysql 插入优化_MySQL批量SQL插入性能优化
- java int 和 long比较大小会_解析java的addExact()与multiplyExact()
- 有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止