问题简述

  最近观察到es集群的压力比较大。cpu使用经常报警,cpu使用超过90%时间持续3分钟会报警。
于是想要针对性的排查一下问题。

  1. 确认一下目前的cpu压力是否是一种因为请求量过大导致的正常压力。
  2. 评价现有的cpu压力是一个什么样的状态,是否需要进行扩容来减轻压力。

过程

1. 机器的配置梳理

机器的配置为16+64G+6Tssd的服务器
1.查看cpu的基本信息

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16
On-line CPU(s) list:   0-15
Thread(s) per core:    1
Core(s) per socket:    16
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 94
Model name:            Intel(R) Xeon(R) Gold 61xx CPU
Stepping:              3
CPU MHz:               2494.138
BogoMIPS:              4988.27
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-15

能看出来是16核 2.5GHZ

2. cpu使用分析

2.1 使用vmstat查看cpu使用的总体情况

vmstat 1 10
procs  -----------memory----------   ---swap-- -----io---- --system---     -----cpu-----r  b   swpd   free   buff  cache     si   so    bi    bo   in     cs     us sy id wa st8  0      0 360636 277324 28147252    0    0   748  4564    0      0 32   4 64  0  0
11  0      0 378904 277368 28128972    0    0  2312 52400  32592   16954  47  5 48  0  09  0      0 370612 277492 28136304    0    0  2120 71848  35218   22522  51  9 40  0  06  2      0 362264 277588 28143432    0    0  4244 261056 51937   24833  49  6 43  2  0
15  0      0 358552 277628 28150412    0    0  4868 603260 77023   37910  51  8 36  5  0
25  2      0 493480 277628 28013572    0    0  6352 106680 219626  30016  84  9  7  0  0
20  1      0 753788 277728 27754924    0    0  6396 76712  68957   22943  55  6 39  0  05  0      0 716852 277856 27791392    0    0  1352 53368  27737   19543  35  3 62  0  0
14  2      0 652308 277916 27854852    0    0  6288 22012  14310   8217   23  2 75  0  0
19  2      0 613420 278052 27893748    0    0   184 270524 45331   34330  38  5 55  2  0

实际采集的时候需要采集更多的数据会更好
从这里可以看到procs-r 等待被执行的队列中的线程数量稍微有一点多,但是cpu的核数是16,相对来说还好
system-cs 上下文的切换次数也比较多,这个次数越高对应的内核的消耗可能会越大。
但是从这里看内核态对cpu的占用算是比较合理的。然后看cpu的id,总体还可以,us 50左右,对于当前的es服务(计算密集+io密集)来说算是比较高的压力。和运维同学沟通了一下。他们给的建议是

这个没有定数。一般情况下cpu密集型的应用cpu的idle 低于20%,可能就会影响到服务的性能。
对于存储而言如MySQL/Monog这种cpu idle低于50%,就会有明显的影响。

2.2 查看业务对cpu的使用情况

jps
2084 Jps
19994 Elasticsearch
 top -Hp 19994
top - 17:15:49 up 30 days,  1:13,  1 user,  load average: 7.42, 7.06, 7.35
Tasks: 336 total,   0 running, 336 sleeping,   0 stopped,   0 zombie
Cpu(s): 50.9%us,  4.2%sy,  0.0%ni, 43.7%id,  0.4%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:  65972900k total, 65610864k used,   362036k free,   295212k buffers
Swap:        0k total,        0k used,        0k free, 28135532k cachedPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
31037 deploy    20   0 1568g  36g 2.6g S 46.1 57.3   1:10.06 java
20450 deploy    20   0 1568g  36g 2.6g S 37.8 57.3   9019:13 java
20460 deploy    20   0 1568g  36g 2.6g S 37.8 57.3   9019:38 java
20456 deploy    20   0 1568g  36g 2.6g S 36.8 57.3   9026:49 java
20449 deploy    20   0 1568g  36g 2.6g S 36.2 57.3   9024:29 java
20458 deploy    20   0 1568g  36g 2.6g S 36.2 57.3   9020:39 java
20463 deploy    20   0 1568g  36g 2.6g S 36.2 57.3   9024:01 java
20447 deploy    20   0 1568g  36g 2.6g S 35.8 57.3   9015:24 java
20453 deploy    20   0 1568g  36g 2.6g S 35.8 57.3   9032:01 java
20459 deploy    20   0 1568g  36g 2.6g S 35.5 57.3   9020:07 java
20462 deploy    20   0 1568g  36g 2.6g S 34.9 57.3   9024:01 java
20466 deploy    20   0 1568g  36g 2.6g S 34.5 57.3   9025:11 java
20451 deploy    20   0 1568g  36g 2.6g S 33.9 57.3   9017:45 java
20461 deploy    20   0 1568g  36g 2.6g S 33.9 57.3   9019:00 java
20464 deploy    20   0 1568g  36g 2.6g S 33.5 57.3   9020:45 java
20465 deploy    20   0 1568g  36g 2.6g S 33.5 57.3   9022:40 java
20457 deploy    20   0 1568g  36g 2.6g S 33.2 57.3   9018:58 java
20448 deploy    20   0 1568g  36g 2.6g S 32.9 57.3   9018:38 java
20431 deploy    20   0 1568g  36g 2.6g S 11.3 57.3   2087:41 java
20434 deploy    20   0 1568g  36g 2.6g S 10.6 57.3   2320:50 java3909 deploy    20   0 1568g  36g 2.6g S 10.6 57.3 256:17.99 java
20411 deploy    20   0 1568g  36g 2.6g S 10.3 57.3   1567:51 java
20415 deploy    20   0 1568g  36g 2.6g S 10.3 57.3   1605:27 java
20432 deploy    20   0 1568g  36g 2.6g S 10.3 57.3   2449:51 java
20409 deploy    20   0 1568g  36g 2.6g S 10.0 57.3   1962:21 java
20430 deploy    20   0 1568g  36g 2.6g S  6.6 57.3 443:30.90 java
20425 deploy    20   0 1568g  36g 2.6g S  6.3 57.3   2472:08 java4224 deploy    20   0 1568g  36g 2.6g S  6.0 57.3 312:00.58 java
20454 deploy    20   0 1568g  36g 2.6g S  5.3 57.3 257:35.44 java3833 deploy    20   0 1568g  36g 2.6g S  5.0 57.3 269:26.03 java3860 deploy    20   0 1568g  36g 2.6g S  5.0 57.3 318:05.67 java
...
...

这里可以看到,cpu资源暂用率较高的总共有17个线程,但是没有单个线程占用cpu超高的情况。
因为这里es做的是日志服务器,猜测是写入线程占用较高的cpu,写入线程池刚好是17.
当然并不一定完全是写入线程,拿出来一个看看。

2.3 查看对应的线程相关信息

因为jstack中显示的线程号是16进制的,所以需要先转成16进制的

printf '%x' 20462
4fee

然后使用jstack过滤

jstack -l 19994 |grep '4fee' -A5"elasticsearch[ESV05][write][T#13]" #104 daemon prio=5 os_prio=0 tid=0x00007efbf8028800 nid=0x4fee runnable [0x00007efb4e9e1000]java.lang.Thread.State: RUNNABLEat org.wltea.analyzer.core.AnalyzeContext.outputToResult(AnalyzeContext.java:294)at org.wltea.analyzer.core.IKSegmenter.next(IKSegmenter.java:129)- locked <0x00000001878dd3e8> (a org.wltea.analyzer.core.IKSegmenter)at org.wltea.analyzer.lucene.IKTokenizer.incrementToken(IKTokenizer.java:88)

可以看到确实是一个write线程。

es服务器的cpu压力过大的调试相关推荐

  1. 网络爬虫对对方服务器造成的压力到底有多大(汇总整理)

    一些大型的网站都会有robot.txt,这算是与爬虫者的一个协议.只要在robot.txt允许的范围内爬虫就不存在道德和法律风险,只不过实际上的 爬虫者一般都不看这个.控制采集速度.过快的采集会对网站 ...

  2. window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...

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

  3. 业务应用数据库压力过大解决方案

    业务应用数据库压力解决方案 引言 一.原因分析 二.在代码层面消化数据库压力 创建索引 转移压力 三.给数据库请个保姆--中间件 Redis MQ 四.忍法--数据库分身术 分布式架构 主从读写分离架 ...

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

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

  5. 如何规划和选择数据库服务器:CPU、内存、磁盘、网络(转)

    转自:http://blog.chinaunix.net/uid-5715-id-2734517.html 学习如何根据业务模型来计算tpcc值,挺有帮助的. 当一个新的业务系统开发完成后,需要在一个 ...

  6. java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起

    Hadoop之HDFS 目录 一.大数据 二.HADOOP 三.HDFS 1.HDFS基本概念 2.HDFS的架构设计 3.HDFS自己对于上面两种数据持久化技术的实现: 4.HDFS读写流程 5.H ...

  7. 使用Ab命令对Apache服务器进行负载压力测试

    使用Ab命令对Apache服务器进行负载压力测试 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协议,转载须注明链接] 本文所述Ab命令已由管理员在Debian.Centos两个系统中实际 ...

  8. oracle 查看cpu使用率,查看Oracle所在服务器的cpu使用情况

    查看Oracle所在服务器的CPU使用情况 --使用Oracle视图查看操作系统监控数据库 select * from v$osstat; select * from v$sysmetric_hist ...

  9. WinDbg+SOS:Web服务器High CPU Hang(100%)实例分析

    下午,msn上面一个朋友发了一个dump文件过来,说是Web服务器的CPU使用率在100%,找不到问题在什么地方,让帮忙看看,遂让把dump文件传过来,找找问题出在哪儿. Framework2.0,W ...

  10. 怎么提高es服务器的性能,es集群服务器配置规则是怎样的?什么是es集群

    es集群服务器配置,可能大家都不是特别的了解,那么,es集群服务器配置规则是怎样的呢?es为什么要实现集群?这是大家都想知道的,接下来我们就跟着小编来看看这方面的内容吧. es集群服务器配置 es为什 ...

最新文章

  1. 7.1 函数的一般形式
  2. QT的QDirIterator类的使用
  3. C#--记录用户程序退出时间日志
  4. sklearn自学指南(part18)--多项式回归-用基函数扩展线性模型
  5. shopify 开发_播客第57集:从Shopify的作家到开发人员,与Adam Hollett一起
  6. OpenCV学习笔记(十四):重映射:remap( )
  7. 博客系统架构对比分析
  8. 使用阿里云服务器(OOS)实现图片上传
  9. jetty java heap space_JFinal + HTTL + jdk1.7 启动服务内存溢出,Java heap space 但jdk1.6正常...
  10. 随想录(虚拟机实现)
  11. 处置Linux下Oracle Tomcat 8080端口辩说
  12. ubantu删除文件(夹)
  13. 实用供暖通风空调设计手册 第三版_从设计到施工,设计师必知的工艺材料知识都在这里!...
  14. 水果店营业额下降原因,水果店如何提高营业额
  15. 检测X光图像中Covid-19
  16. 如何把计算机桌面图标放到底下,怎么把电脑桌面图标放在任意位置
  17. poj_3987 Trie图
  18. notepad打开java乱码_notepad打开中文乱码
  19. 埃及分数数学模型c语言,C语言将真分数分解为埃及分数代码解析
  20. 攻防世界WEB题练习

热门文章

  1. 汇编语言典型例子详解_经典汇编程序100例
  2. Windows之WDM驱动程序开发:class3
  3. 7-5 游客检票 - 实验3 简单的计算及输入输出 -《Python编程基础及应用实验教程》(高等教育出版社)
  4. 政策评估计量经济学模型(DID)
  5. 无线联网常见问题[1]-搜不到无线网络(请先耐心看完)
  6. php第一季视频教程 李,李炎恢老师PHP系列课程第一季基础视频教程_PHP教程
  7. c语言程序电子词典,C语言及程序设计进阶例程-14 开发一个电子词典
  8. 电子词典系统vc++_《VC++ 编程词典(珍藏版)》
  9. WebCrack:一键自动化日站工具 ——yzddMr6
  10. 用Tornado实现web聊天室(前端采用vue+bootstrap)