AWS EC2 安装 Kibana X-Pack 插件的内存不足问题

最近在学习 ELK,为了尝试和练手,我申请了 AWS EC2 micro instance (一年免费使用的主机),内存为 1G.

在安装 ElasticSearch, Logstash, Kibana 的过程中,整个过程还是比较顺利,但是也遇到了一个非常头疼的问题,就是 Kibana 的 X-Pack 无论如何也安装不上,一直卡在 "Optimizing and caching browser bundles...",显示如下。

[[email protected] kibana]# bin/kibana-plugin install x-pack
Attempting to transfer from x-pack
Attempting to transfer from https://artifacts.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.6.3.zip
Transferring 119488769 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...

然后整个主机无响应,在 AWS 控制台观察到安装时的CPU使用率多达到 100%,在AWS 控制台重启实例,重新安装并使用 top 命令观察,发现1G内存基本被耗尽 (957128k used),弄到凌晨也无法入睡(top - 00:32:22 up 4 min)。

top - 00:32:22 up 4 min,  2 users,  load average: 0.92, 0.55, 0.24
Tasks:  84 total,   2 running,  82 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  1.4%sy,  0.0%ni,  0.0%id, 97.9%wa,  0.0%hi,  0.0%si,  0.7%st
Mem:   1017296k total,   957128k used,    60168k free,       80k buffers
Swap:        0k total,        0k used,        0k free,     2052k cached

如果同时还有其他命令窗口,输入命令时会出线错误提示: fork: Cannot allocate memory

第一个想法是观察并停止内存使用比较多的服务来释放空间,最后连 amazon-ssm-agent,sendmail 都停止了,但依旧无法解决。当时真的有个冲动去购买一个内存大的主机,但是多大的内存才合适,我并没有底,弄得太晚只能睡觉去了。第二天,在地铁上,下班后不断的搜索 X-Pack 相关的指导,最终从一篇安装 的经验中得到提示。

“你可能会等待不知道多久才成功:(所以建议调大虚拟机的内存和处理器的核数)”原文链接 [1]

经过检查,发现虚拟内存 (swap) 空间为 0,但 CPU 使用率并不高,所以可以采用以时间换空间的办法(CPU时间换内存空间),增加虚拟内存,这便是第二个方案。

第二方案的具体步骤如下:(我增加了 4 G 虚拟内存)

  • 检查内存
[[email protected] kibana]# free -m
             total       used       free     shared    buffers     cached
Mem:           993        224        768          0         13        163
-/+ buffers/cache:         47        945
Swap:            0          0          0
  • 生成 swap 使用的文件
[[email protected] swap]#  dd if=/dev/zero of=swap_4G bs=1024000 count=4000
4000+0 records in
4000+0 records out
4096000000 bytes (4.1 GB) copied, 62.7646 s, 65.3 MB/s

[[email protected] swap]# mkswap swap_4G
Setting up swapspace version 1, size = 3999996 KiB
no label, UUID=39c72236-feb2-4dd6-bc5d-d2906891de3f
  • 加载 swap
[[email protected] swap]# swapon swap_4G
swapon: /opt/swap/swap_4G: insecure permissions 0644, 0600 suggested.

[[email protected] swap]# chmod 600 swap_4G
  • 成功
[[email protected] swap]# free -m
             total       used       free     shared    buffers     cached
Mem:           993        930         62          0         14        838
-/+ buffers/cache:         77        915
Swap:         3906          0       3906
  • 如果需要在重启开机时自动加载,则加入到 /etc/fstab 文件,如:
[[email protected] swap]# vi /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/opt/swap/swap_4G    swap    swap    defaults        0   0

加载 SWAP 成功后再次安装 Kibana X-Pack plugin,大功告成,整个安装过程耗时20分钟左右

[[email protected] kibana]# bin/kibana-plugin install x-pack
Attempting to transfer from x-pack
Attempting to transfer from https://artifacts.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.6.3.zip
Transferring 119488769 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

安装过程中也通过 top 观察 CPU 和内存状态。swap 空间的使用超过 1.5G,swap 服务kswapd0 也启动,但 CPU 使用率并不高,说明从内存与文件系统上的虚拟内存(swap) 的数据迁移消耗的计算资源并不多,这种时间换空间的办法是很有效的。

top - 22:09:20 up 10 min,  2 users,  load average: 1.80, 1.26, 0.59
Tasks:  78 total,   2 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.1%us,  1.0%sy,  0.0%ni,  0.0%id, 95.8%wa,  0.0%hi,  0.0%si,  1.0%st
Mem:   1017292k total,   949620k used,    67672k free,      812k buffers
Swap:  3999996k total,  1532452k used,  2467544k free,    11904k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2801 root      20   0 2514m 620m 2188 R  6.0 62.4   3:13.32 node
  633 root      20   0     0    0    0 S  1.0  0.0   0:04.16 kswapd0

小结:

  1. 在内存受限的情况下,可以采用时间换空间的办法来改善;反之亦然,在计算资源要求很高时,可以增加内存,比如核心交易系统可以在启动时将尽量多的内容预先加载在内存并预分配空间。
  2. 采用此方法,可以利用好云资源,而不是一味的用钱解决问题,做到最经济实用。
  3. 平时对一些技术基础进行深入的理解和测试练习,可以更快的预知到问题所在,快速解决。


引用:[1]: https://segmentfault.com/a/1190000010981283

时间: 2024-07-31 18:58:52

AWS EC2 安装 Kibana X-Pack 插件的内存不足问题的相关文章

AWS EC2安装docker时的问题

在AWS EC2的实例(Ubuntu)里面安装docker时,使用通常的安装步骤 :~$ sudo apt-get update :~$ sudo apt-get install docker 安装完成之后,查看docker版本时,提示docker命令不存在 :~$ sudo docker -v sudo: docker: command not found 在stack overflow上看人说,使用apt-get 安装的是一个GUI应用程序,而不是我们要使用的开发工具.通过运行如下脚本来安装

elasticsearch5.3安装kibana、x-pack插件、elasticsearch-an

1. 安装Kibana 1.1 安装Kibana Kibana是一个强大的es图形化组件,可以通过http的方式来查看es集群的状态,操作数据等. 当前es官方推荐的拓展组件为Kibana和X-Pack,而X-Pack需要依赖于Kibana. * 选择任意一台节点安装kibana |kibana的版本最好和es一致(5.3) 下载解压 https://www.elastic.co/downloads/kibana 解压到目标路径 tar -zxvf kibana-5.3-linux-x86_64

亚马逊AWS免费套餐EC2安装centos连接登录并创建root

前言:刚开始使用亚马逊的AWS的免费套餐EC2,由于个人习惯使用centos系统,所以果断安装,但是AWS为了安全性,默认禁止用户使用root账户,导致安装配置环境各种问题.所以我把从安好系统后遇到的一些基本问题整理出来,方便大家更快的入手! 涉及到的问题: 1. 如何在aws上安装centos系统 2. 如何删除创建好的vps服务器 3. 安装的centos系统后,如何在windows上远程登录ec2 4. 在ec2上创建root账户,并且使用root账户登录 第1块:aws上怎么安装cent

在NodeJS中配置aws ec2

获取access key和secret access key 自己账户下有security credentials的选项 然后点击Access Keys 根据提示create new access key 安装SDK  npm install aws-sdk --save 在app.js中,声明引用aws-sdk  var AWS = require('aws-sdk'); 配置EC2的服务           在项目根目录下新建文件config.json,输入以下内容保存  { "access

安装gralde以及gradle插件

安装gralde 安装本地gradle 以上安装文件,详见安装文件.rar 安装jdk1.8 和 gradle2.6 点击相应安装文件中的setup文件,按步安装即可 Jdk和gradle需要配置环境变量: ???? Jdk 环境变量配置:计算机->属性-> 高级系统配置->环境变量 新建系统环境变量JAVA_HOME 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jre1.8.0_45(刚才安装的jdk的安装根目录) 配置path 在计算机->属

AWS EC2服务器的HTTPS负载均衡器配置过程

AWS EC2服务器配置负载均衡器步骤: 1.普通负载均衡器 至少两台EC2实例,这里以Centos6.7系统为例 启动之后先安装个apache的httpd服务器默认80端口,或者使用其他服务器和端口也行,配置负载均衡器的时候需要用到这个端口 iptables防火墙开启80端口或者直接关闭防火墙 在/var/www/html里面新建个index.html文件,内容随意,注册实例到负载均衡器的时候会通过这个端口请求这个默认主页文件,请求得到实例才能注册成功 可以先使用 curl http://内网

Amazon AWS EC2开启Web服务器配置

在Amazon AWS EC2申请了一年的免费使用权,安装了CentOS + Mono + Jexus环境做一个Web Server使用. 在上述系统安装好之后,把TCP 80端口开启(iptables),同时启动Jexus.正常情况下,从客户端使用 http://IP地址/info,就可以看到Jexus运行成功的效果了.但在Amazon AWS EC2却说网络出现问题或者无法访问.因为对CentOS本身来说,TCP 80端口已经打开,但是否有AWS本身还做限制呢? 在AWS主控台,找到这个Se

安装GO语言环境之安装Visual Studio Code插件

在安装Visual Studio Code插件的时候,由于谷歌的限制,在下载下列插件的时候会报错: go get -u -v github.com/nsf/gocode go get -u -v github.com/rogpeppe/godef go get -u -v github.com/golang/lint/golint go get -u -v github.com/lukehoban/go-find-references go get -u -v github.com/lukeho

Jenkins Docker安装及利用Docker-build-step插件部署Docker

生产部署环境:A:192.168.1.2 B:192.168.1.3  两台服务器系统均是Centos 7.3 , Docker版本都1.12.6 操作步骤: 1.在A服务器上使用命令:docker pull jenkinsci/jenkins  获取到Docker镜像: 2.使用命令:docker run -p 8080:8080 -p 50000:50000 --name jenkins -u root -v /var/jenkins_home:/var/jenkins_home jenki