【Elasticsearch】Kibana优化过程(Optimize)过长或无法结束的解决方案
1.概述
转载:Kibana优化过程(Optimize)过长或无法结束的解决方案
使用过Kibana的同学应该都知道,当我们在kibana的配置文件中打开或者关闭功能,或者安装、卸载额外的插件后,重启kibana会触发一个优化的过程(optimize),如下图:
这个过程或长或短,视你电脑的性能而定。这里简单介绍一下该过程所要完成的事情。
Kibana是一个单页Web应用
首先,Kibana是一个单页的web应用。何为单页web应用?即所有的页面的读取都是在浏览器上完成,而与后台服务器无关。与后台服务器的通信只关乎数据,而非页面。所以,应用上所有的UI都被打包在一起,一次性的发送到了浏览器端,而不是通过URL到后台进行获取。所以,我们看到kibana的首页是下面这样的: http://localhost:5601/app/kibana#/ 注意这里的#后,代表#后面的内容会被浏览器提取,不往服务器端进行url的情况,而是在浏览器上进行内部重新渲染。因为所有的页面都是存储在浏览器的,所有在初次访问的时候,会加载大量的代码到浏览器端,这些代码都是被压缩过的bundle文件:
而optimize的过程,就是把这些原本可读性的源代码压缩为bundle.js的过程。因此,每当你对Kibana进行裁剪之后重启,因为前端的部分是完全由浏览器负责的,所有bundle文件需要重新生成后再发给浏览器,所以会触发optimize的过程。
Kibana在6.2.0版本之后,常规版本已经默认自带了xpack(当然,你还是可以直接下载不带xpack的开源社区版),导致Kibana的size已经到了200M左右,而且越往后的版本,功能越多,代码量越大,每次optimize的过程都会耗费更多的时间。一般来说,我们会将Kibana部署在单独的机器上,因为这仅仅是一个web后端,通常我们不会分配比较优质的资源,(2C4G都算浪费的了),这种情况下面,每次我们裁剪后重启Kibana都会耗费半个小时~1个小时的时间,更有甚者直接hang住,查看系统日志才知道OOM了。
Nodejs的内存机制
Kibana是用Nodejs编写的程序,在一般的后端语言中,基本的内存使用上基本没有什么限制,但是在nodeJs中却只能使用部分内存。在64位系统下位约为1.4G,在32位系统下约为0.7G,造成这个问题的主要原因是因为nodeJs基于V8构建,V8使用自己的方式来管理和分配内存,这一套管理方式在浏览器端使用绰绰有余,但是在nodeJs中这却限制了开发者,在应用中如果碰到了这个限制,就会造成进程退出。
Nodejs内存机制对Kibana优化的影响
因为Kibana的代码体量越来越大,将所有的代码加载到内存之后,再解析语法树,进行bundle的转换所耗费的内存已经接近1.4G的限制了,当你安装更多插件,比如sentinl的时候,系统往往已经无法为继,导致Kibana无法启动
解决方案
这种情况下,我们需要在Kibana启动的时候,指定NodeJs使用更多的内存。这个可以通过设置Node的环境变量办到。
NODE_OPTIONS="--max-old-space-size=4096"
当然,我的建议是直接指定在kibana的启动脚本当中,修改/usr/share/kibana/bin/kibana文件为:
#!/bin/sh
SCRIPT=$0# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; dols=$(ls -ld "$SCRIPT")# Drop everything prior to ->link=$(expr "$ls" : '.*-> \(.*\)$')if expr "$link" : '/.*' > /dev/null; thenSCRIPT="$link"elseSCRIPT=$(dirname "$SCRIPT")/"$link"fi
doneDIR="$(dirname "${SCRIPT}")/.."
NODE="${DIR}/node/bin/node"
test -x "$NODE" || NODE=$(which node)
if [ ! -x "$NODE" ]; thenecho "unable to find usable node.js executable."exit 1
fiNODE_ENV=production exec "${NODE}" $NODE_OPTIONS --max_old_space_size=3072 --no-warnings "${DIR}/src/cli" ${@}
改动在最后一句:NODE_ENV=production exec "${NODE}" $NODE_OPTIONS --max_old_space_size=3072 --no-warnings "${DIR}/src/cli" ${@}
这样,我们可以保证Kibana能顺利的完成optimize的过程
【Elasticsearch】Kibana优化过程(Optimize)过长或无法结束的解决方案相关推荐
- ELasticSearch安装使用过程中遇到的坑的解决方案,以及使用Kibana操作ELasticSearch
一.安装elasticsearch和kibana 安装elasticsearch和kibana,我现在使用的是windows版本的,安装其实也不难,具体的安装教程可以参照这两篇博客,写的安装步骤也很详 ...
- 美团外卖搜索基于Elasticsearch的优化实践
美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-Based Service(LBS)业务场景对Elasticsearch的查询性能进行优化.该优化基于Run-Len ...
- 触类旁通Elasticsearch:优化
目录 一.合并请求 1. 批量操作(bulk) 2. 多条搜索和多条获取 二.优化Lucene分段的处理 1. refresh和flush 2. 合并以及合并策略 三.缓存 1. 过滤器和过滤器缓存 ...
- ELK学习3_使用redis+logstash+elasticsearch+kibana快速搭建日志平台
日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数 ...
- 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
1.概述 转载:基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化 1.需求 有一批特定用途(文末揭晓)的 IP 地址. 想通过地图形式可视化展示 IP 地址对应的经纬 ...
- Elasticsearch+Kibana集群部署(3节点)
Elasticsearch+Kibana集群部署(3节点) l i n d o r − − 良民笔记 lindor--良民笔记 lindor−−良民笔记 文章目录 Elasticsearch+Kiba ...
- ElasticSearch 性能优化总结 04
Elasticsearch是如何实现Master选举的? Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单 ...
- Elasticsearch使用优化之拙见
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Elasticsearch常常作为日志存储和分析的工具,在企业级应用中常常使用.Elastic ...
- ElasticSearch性能优化策略【转】
ElasticSearch性能优化主要分为4个方面的优化. 一.服务器部署 二.服务器配置 三.数据结构优化 四.运行期优化 一.服务器部署 1.增加1-2台服务器,用于负载均衡节点 elasticS ...
最新文章
- 分享Silverlight/WPF/Windows Phone一周学习导读(1月17日-1月23日)
- [转]linux文件同步工具Unison的使用
- Android Hal层简要分析
- centos 安装java_在CentOS8上编译安装开源EDA工具——Surelog
- Flexbox 布局 – 表单
- 嵌入式Linux USB WIFI驱动的移植
- Java 多线程(六)——进程间通信与线程间通信
- ADS 2013 momentum仿真出错
- 年薪五万程序员的生活及他的理财梦
- 一分钟带你快速认识S参数
- Appium学习:雷电模拟器的使用
- 《高质量C/C++编程指南》第1期
- tensorflow2.0基础操作-手写数字识别实战
- discuz mysql类_Discuz论坛教程之数据库操作DB类和C::t类介绍
- 荣耀全明星不显示服务器,新版本,新气象!这些荣耀全明星新版本的细节与豆知识你了解吗?...
- Java面试题总结(乱序版,来自大厂面试官的MySQL灵魂十连问
- Tuxedo ubbconfig配置详解
- 国科大人工智能学院.深度学习.期末复习知识点笔记
- ubuntu安装pr_Ubuntu16.04安装wps办公软件解决文字缺失
- RTU和DTU分别是什么?