开发十年,就只剩下这套架构体系了!!

国外开发者平台 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占用情况:

$topPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND1893 admin     20   0 7127m 2.6g  38m S 181.7 32.6  10:20.26 java

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

通过以上命令,我们可以看到,进程ID为1893的Java进程的CPU占用率达到了181%,基本可以定位到是我们的Java应用导致整个服务器的CPU占用率飙升。

定位线程

我们知道,Java是单进程多线程的,那么,我们接下来看看PID=1893的这个Java进程中的各个线程的CPU使用情况,同样是用top命令:

$top -Hp 1893PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND4519 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 4519
11a7

接下来,通过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: RUNNABLEat 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.parseValidationXml(ValidationXmlParser.java:65)at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(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等问题的排查手段。

关于本次问题排查,你有什么想说的呢?欢迎交流。


http://www.taodudu.cc/news/show-4599939.html

相关文章:

  • 面试官:线上服务CPU飙高怎么排查?
  • 服务器定位cpu高占用率代码php,面试官:线上服务器CPU占用率高如何排查定位问题?,...
  • 视频编辑软件-剪辑制作后期配音字幕合并剪切图片电子相册Mac手机
  • 神器 logging,你真的了解吗?
  • 阿里数据中台建设之道,阿里专家10张图从理念到实践,干货解读!
  • 模块预制式数据中心方案评估与建议
  • c++ vector 一部分_巴博斯制定奔驰C级(W204)全套改装方案,运动范er十足
  • 全球及中国净水器市场产量趋势与竞争策略研究报告2022版
  • 机器视觉系列(三)——电气部分
  • Inventor SDK入门---用API创建具有旋转和拉伸特征的零件
  • 易福门传感器PN3593
  • 安科瑞能效管理系统在地下污水处理厂中的应用
  • 中国高温合金市场规模预测与发展态势研究报告2022版
  • 按图搜索义乌购商品(拍立淘) API
  • A-286热加工/锻造
  • 中国不锈钢行业需求态势及发展形势展望报告(新版)2022-2027年
  • 如何应对焦虑
  • 焦虑到底是什么?
  • 应对焦虑的策略
  • 程序员该如何应对大龄危机
  • 中国式焦虑,都是比出来的!
  • 前端的焦虑
  • 很多人已经学会了应对恐惧和焦虑的秘诀
  • 帮上百家客户完成数字化转型后,SAS开出了四剂药方应对变革焦虑
  • 育儿-《让孩子远离焦虑》书中的精髓:家长如何帮助孩子解决他们自身的焦虑问题。
  • 焦虑,怎么办?
  • 如何停止焦虑
  • 打破 Dockershim 移除焦虑,且看Rancher 如何应对
  • 应对不确定
  • 焦虑,不知所措,努力应对,坦然,双非本硕求职算法的故事

面试官:线上服务器CPU占用率高如何排查定位问题?相关推荐

  1. 服务器定位cpu高占用率代码php,面试官:线上服务器CPU占用率高如何排查定位问题?,...

    面试官:线上服务器CPU占用率高如何排查定位问题?, 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果 ...

  2. 原创|面试官:线上服务器CPU占用率高如何排查定位问题?

    国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...

  3. 线上服务器CPU占用率高如何排查定位问题?

    (关联着看看这篇文章:https://blog.csdn.net/u011277123/article/details/103768939) 解决问题的能力以超高比例排名第一,这也是为什么很多面试过程 ...

  4. 服务器cpu占用率高怎么解决,线上服务器CPU占用率高怎么办?

    如果线上服务器发生CPU占用率高时,应该如何排查并定位问题. 1.问题发现 本文整理自一个真实的案例,是楼主负责的业务,在一次大促之前的压测时发现了这个问题. 在每次大促之前,我们的测试人员都会对网站 ...

  5. 线上服务器CPU负载过高的问题解决过程

    线上服务器CPU负载过高的问题解决过程 一.找到CPU占用过高进程 执行top命令,发现PID为12443的Java进程占用CPU高达350%,出现故障. 二.定位具体线程或代码 找到该进程后,接下来 ...

  6. 一次简单的服务器 cpu 占用率高的快速排查实战

    前两天,朋友遇到一个线上 cpu 占用率很高的问题,我们俩一起快速定位并解决了这个问题.在征求朋友同意后,特发此文分享整个过程.本文以对话的形式展开,加上我的内心独白.文中对话与实际对话略有出入. 友 ...

  7. 一次服务器CPU占用率高的定位分析

    背景 通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的.幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有 ...

  8. 线上服务器CPU占用过高?7步带你搞定

    一. 前言 在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势.现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维. 今天壹哥 ...

  9. 服务器CPU占用率高,如何排查?

    1.定位进程 登录服务器,执行top命令,查看CPU占用情况: $top 2.定位线程 如果进程23456占用率高: $top -Hp23456 进行定位线程 3.定位代码 通过top命令,我们目前已 ...

最新文章

  1. Tensorflow实现的深度NLP模型集锦(附资源)
  2. struts解决form提交的中文参数乱码问题
  3. 牛客竞赛语法入门班数组栈、队列和stl习题【未完成】
  4. 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境
  5. linux 段大小,linux - 在套接字上的Linux中减少TCP最大段大小(MSS) - 堆栈内存溢出...
  6. 新疆大学OJ(ACM) 1099: 数列有序!
  7. CF1497E1 Square-free division (easy version)
  8. thymealf如何实现传单个变量给html_纯前端使用JavaScript发送电子邮件,5个步骤图文教程...
  9. [转帖]CentOS 7安装并启动Google浏览器(★firecat亲测有效★)
  10. Flash与后台数据交互方法总结
  11. Fiddler工具的使用与手机app数据抓包
  12. 计算机图形学代码之三角形绘制
  13. SOSOAPI前后端分离开发模式下的接口测试
  14. padavan固件获取网络地图中的客户端状态
  15. 不懂Shopee站点分析,入驻Shopee平台哪个站点?
  16. 户口迁移一定要本人去办理的吗???
  17. 如何清理华为云空间的照片
  18. 安装部署(七) HBase集群安装部署与测试
  19. 激光振镜协议C语言源码,Laser-Marking 激光振镜打标机源代码 - 下载 - 搜珍网
  20. JMeter开发一个最简单的Sampler

热门文章

  1. mysql学生班级老师_MySQL全方位练习(学生表 教师表 课程表 分数表)
  2. 空间圆弧插补算法,matlab实现封装函数
  3. Topcoder SRM 700 1000pts:AnyNumber(DP)
  4. 斐波那契数列 - 实现一个斐波那契数列,并且打印出来
  5. boostrap安装和使用
  6. revit2018注册表删除_如何完全卸载Revit
  7. 高定服装走向NFT,巴黎时装周的数字化将带来什么新趋势?
  8. 数据库原理(十 一)- 概念结构设计
  9. orgchart组织机构图
  10. AFNetworking官网文档及翻译