写在最前
此文仅作为本人网络日志,记录工作学习经验以备忘。并非教程、论文或心得。
问题
近两天每天早上回来发现测试机上kibana的进程消失了
假设
因为之前在1G内存的机器上跑ELK时,如果安装了x-pack就会导致启动kibana时elasticsearch崩溃掉,并且在扩大内存之后问题解决,因此假设问题在于out of memory
目的
elasticsearch占用内存比较大,网上大多优化配置是加大elasticsearch的内存配置,锁住内存交换等方法以提高性能。但是现在我先要做的是,尽量减小elastic资源消耗,以保证我机器上其他程序的正常运行。因此与这些优化的目的相反。
实验与分析
首先在$ES_HOME(elasticsearch目录)/config下有3个配置文件,其中jvm打头的配置中配置JVM相关设置,其中:
################################################################
## IMPORTANT: JVM heap size
######################################################
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
## -Xms4g
## -Xmx4g
要求这里初始化(最小)内存和最大内存需要设置一样,我虚拟机目前配置的2G内存,希望留给其他程序足够的空间,这里设置为1g:
-Xms1g
-Xmx1g
这样跑下来内存占用:
是超过了我设置的值的。因此我想试试bootstrap.memory_lock: true
这个设置
在Memory中去掉该设置的注释:
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
设置了这个属性之后,不再回使用内存交换,即从读写虚存,而虚存实际上是硬盘读写,效率比内存低得多,一般开启这个选项是为了提高性能.然后就出问题了,后台启动elastic过一阵进程自动消失,查看日志发现
[2017-11-17T11:21:16,128][INFO ][o.e.n.Node ] [es_node1] starting …
[2017-11-17T11:21:16,447][INFO ][o.e.t.TransportService ] [es_node1] publish_address {192.168.5.233:9300}, bound_addresses {192.168.5.233:9300}
[2017-11-17T11:21:16,457][INFO ][o.e.b.BootstrapChecks ] [es_node1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-11-17T11:21:16,458][ERROR][o.e.b.Bootstrap ] [es_node1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
[2017-11-17T11:21:16,523][INFO ][o.e.n.Node ] [es_node1] stopping …
[2017-11-17T11:21:16,741][INFO ][o.e.n.Node ] [es_node1] stopped
[2017-11-17T11:21:16,742][INFO ][o.e.n.Node ] [es_node1] closing …
[2017-11-17T11:21:16,810][INFO ][o.e.n.Node ] [es_node1] closed
查此错报,
原因:锁定内存失败
解决方案:
切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:
sudo vim /etc/security/limits.conf添加如下内容:
* soft memlock unlimited
* hard memlock unlimited
备注:* 代表Linux所有用户名称保存、退出、重新登录才可生效
临时取消限制
ulimit -l unlimited
能正常启动,内存占用:
这样会导致使用的内存更多,但是由于锁住了交换内存,效率应该会上升,根据需要,我现在不锁定内存.注释掉锁定的配置.
目前看log,和继续测试