http://zhaoyanblog.com/archives/754.html

ThreadPool部分

Elasticsearch 内部使用了线程池,通过这些线程池之间的合作完成工作,在需要时传递工作。一般来说你不需要调整和优化线程池。但是有时候你看着这些线程池的状态,对你掌握你的集群行为是很有帮助的。

这有十几个线程池,他们的格式都是类似的:

"index": {
"threads": 1,
"queue": 0,
"active": 0,
"rejected": 0,
"largest": 1,
"completed": 1
}

每个线程都列出了配置的线程数,其中有多少个线程是正在处理事务的,也就是活动的,还有多少等待处理的事务在队列里。

如果队列满了,超出了限制,新的事务就会开始被拒绝,你可以看到拒绝的事务的统计,这通常表示你的集群正处在一个资源瓶颈,因为一个满的队列表示你的集群或者节点正在以最大的速度处理事务,但是依然赶不上新事务增加的速度。

关于bulk的拒绝

如果你的线程队列出现拒绝请求的事情,那么醉有可能发生的就是bulk批量索引的请求,通过采用并发导入线程,很容易发给elasticsearch很多的bulk请求,并发请求越多越好吗?

现实中,任何集群都有一定的线程,造成入不敷出。一旦这个阈值达到了,你的队列就会被迅速的填满,新的bulk请求就会被拒绝。

这是一个好事,队列的拒绝是对压力的一个有效措施,他们告诉你你的集群正在处于最大的容量,这要好过把数据全部塞到内存队列里。增大队列大小不会提升性能,它只会隐藏问题,如果你的集群每秒只能处理1万个文档,这和你的队列大小是100还是一千万没有任何关系,你的集群每秒的处理能力仍然是1万个文档。

队列只会隐藏性能问题,并且带来数据丢失的风险,在队列里的表示还没有被处理的,如果你的节点挂了,那么这些请求就会永远的丢失了,此外队列会消耗很大的内存,这不是个好主意。

最好我们通过优雅的解决队列满了的问题来清理队列。当你遇到bulk拒绝请求时候,你应该采取如下措施:

1、停止插入线程3-5秒
2、从bluk请求里提取被拒绝的操作,可能大部分请求都成功了。bulk的响应里会告诉你哪些操作成功了,哪些操作被拒绝了。
3、把拒绝的操作重新生成一个新的bulk请求。
4、如果再有拒绝请求发生,就重复上面的步骤。

通过这种方式,你的代码会自然的适应你的集群的负载,自然的减压。

请求拒绝不是错误,它们只是表示你需要过会重试。

有十几个线程池,大部分你可以忽视,但是有少部分需要你特别注意:

indexing 正常的索引文档的请求
bulk 批量请求,这有区别于非批量的请求
get 根据id获取文档的操作
search 索引的检索和查询请求
merging 专门管理lucene合并的线程池

FS和Network部分(剩余空间和网络)

继续看node stats api返回的信息,你会看到一个关于文件系统的统计信息,剩余空间,数据存放目录,磁盘io等待。如果你没有监控剩余磁盘空间大小,你可以从这里得到。磁盘io也是很容易得到,但是一些更专业的命令行工具(例如iostat)可能更有用。

很显然,如果你的磁盘空间不足了,elasticsearch肯定完蛋了,所以一定要保证充足的磁盘空间。

下面是关于network统计的两个部分:

"transport": {
"server_open": 13,
"rx_count": 11696,
"rx_size_in_bytes": 1525774,
"tx_count": 10282,
"tx_size_in_bytes": 1440101928
},
"http": {
"current_open": 4,
"total_opened": 23
},

transport: 显示了网络传输的基本信息,这涉及到节点之间的通信(通常是9300端口)和一些客户端和节点之间的链接。如果你看到很多链接在这里,不要担心,elasticsearch会保持大量的节点之间的链接。

http表示关于http端口(通常是9200)的基本信息,如果你看到一个非常大的total_opened,并且在不断增加,这是一个很明确的信号:你的客户端没有使用HTTP的keep-alive。keep-alive的链接对性能很重要,因为不断的创建和断开socket链接是很昂贵的(同事也会浪费open files个数),确保你的客户端都使用了正确的配置。

Circuit Breaker(断路器)

最后我们来到最后一个部分,关于fieldata 阻断的统计(在《Circuit Breaker》章节中有介绍。

"fielddata_breaker": {
"maximum_size_in_bytes": 623326003,
"maximum_size": "594.4mb",
"estimated_size_in_bytes": 0,
"estimated_size": "0b",
"overhead": 1.03,
"tripped": 0
}

这里,你可以看到最大阻断的大小(例如,你的查询请求使用多大的内存的时候,这个断路器就会进行左右)。这个部分就是告诉你断路器发挥作用的次数,以及当前配置的过载值,这个值是用来估计的(译者注:用来估计查询可能需要使用的内存)。因为有些查询比其它的比较难估计。

最主要的东西还是关于断路器起作用的次数的统计,如果这个值很大并且持续增加,表示你的查询需要优化,或者你需要更多的内存(整体上增加内存,或者增加更多的节点)。

原文地址:https://www.elastic.co/guide/en/elasticsearch/guide/current/_monitoring_individual_nodes.html

Elasticsearch重要文章之四:监控每个节点(ThreadPool部分)的更多相关文章

  1. [翻译]Elasticsearch重要文章之四:监控每个节点(jvm部分)

    http://zhaoyanblog.com/archives/753.html 操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细.他们列出了基本的资源统计,例如CPU和负 ...

  2. ELASTICSEARCH 中暂时移除一个节点

    ELASTICSEARCH 中暂时移除一个节点 版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 前言 在维护ES集群的过程中,我们会经常遇到将某个ES实 ...

  3. 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  4. 6.监控elasticsearch集群---放弃采用(获取不到数据),建议看另一篇文章:监控elasticsearch

    prometheus监控es,同样采用exporter的方案. 项目地址: elasticsearch_exporter:https://github.com/justwatchcom/elastic ...

  5. ElasticSearch 监控单个节点详解

    1.介绍 集群健康 就像是光谱的一端——对集群的所有信息进行高度概述. 而 节点统计值 API 则是在另一端.它提供一个让人眼花缭乱的统计数据的数组,包含集群的每一个节点统计值. 节点统计值 提供的统 ...

  6. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  7. 转载:监控每个节点(jvm部分)

    操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细.他们列出了基本的资源统计,例如CPU和负载.操作系统部分描述了整个操作系统的情况,进程部分只是描述了Elasticsear ...

  8. 转载:监控每个节点(Indices部分)

    集群的健康只是一个方面,它是对整个集群所有方面的一个很高的概括.节点状态的api是另外一个方面,它提供了关于你的集群中每个节点令你眼花缭乱的统计数据. 节点的状态提供了那么多的统计数据,在你很熟悉它们 ...

  9. 刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解【转】

    转自:https://blog.csdn.net/laoyang360/article/details/78290484 1.问题引出 ES5.X节点类型多了ingest节点类型. 针对3个节点.5个 ...

随机推荐

  1. 子数整数(P1151&NOIP水题测试(2017082301))

    题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...

  2. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

  3. socketserver实例化过程

    一.创建server对象时__init__的执行 找继承中的__init__ 这是ThreadingMixIn类中的方法 这是TCPServer类中的方法(父类BaserServer中还会用到fini ...

  4. java.lang.SuppressWarnings的注解简介

    简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告, ...

  5. Java获取文件后缀名

    int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (licenceImg.getOriginalF ...

  6. s5-15 开放的最短路径优先_OSPF

    L-S路由协议的实例—OSPF 开放的路径优先(Open Shortest Path First) 使用图(graph)来表述真实的网络 - 每个路由器/Lan都是一个节点 - 测量代价/量度(met ...

  7. 腾讯云 centos 一键安装nginx环境

    这里测试centos版本为7.4 进入命令行直接敲入一下代码 $ yum install nginx 根据提示 进行确认 下一步 即可安装完毕: 服务器默认根目录为 : /usr/share/ngin ...

  8. ubuntu-server-12.04.2安装配置jdk

    原文链接:http://blog.csdn.net/amymengfan/article/details/9958461 我选择的是离线安装,这需要先下载好jdk安装包(下载地址:http://www ...

  9. Android自定义视图二:如何绘制内容

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  10. python基础之列表list元组tuple

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7041763.html python基础之列表list元组tuple 列表li ...