kibana 报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed

环境

kibana6.4.3

logstash6.4.3

es6.4.3

日志收集服务器内存8g

前景

elk 服务器搭建好的前几天服务都正常

大概一周以后出现kibana 连接不上,登录服务器发现只有 kibana 挂掉,es 和 logstash 都正常运行,排查日志发现:

<--- Last few GCs --->
 
[7232:0x28c9b10] 1349425042 ms: Mark-sweep 1360.5 (1431.3) -> 1360.5 (1431.3) MB, 1475.4 / 0.0 ms  allocation failure GC in old space requested
[7232:0x28c9b10] 1349426671 ms: Mark-sweep 1360.5 (1431.3) -> 1360.5 (1431.3) MB, 1628.7 / 0.1 ms  last resort GC in old space requested
[7232:0x28c9b10] 1349428162 ms: Mark-sweep 1360.5 (1431.3) -> 1360.5 (1431.3) MB, 1490.7 / 0.0 ms  last resort GC in old space requested
<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x2e54d3625879 <JSObject>
    2: /* anonymous */(aka /* anonymous */) [/opt/kibana-6.4.3/src/server/status/lib/cgroup.js:70] [bytecode=0x1d79566d9321 offset=20](this=0x754e6a822d1 <undefined>,controller=0x31e957539041 <String[4]: pids>)
    3: arguments adaptor frame: 3->1
    4: forEach(this=0x31e957539061 <JSArray[1]>)
    5: /* anonymous */(aka /* anonymous */) [/opt/kibana-6.4.3/src/server/status/lib/cgroup.js:69] [b...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [./../node/bin/node]
 2: 0x8c21ec [./../node/bin/node]
 3: v8::Utils::ReportOOMFailure(char const*, bool) [./../node/bin/node]
 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [./../node/bin/node]
 5: v8::internal::Factory::NewFixedArray(int, v8::internal::PretenureFlag) [./../node/bin/node]
 6: v8::internal::HashTable<v8::internal::StringTable, v8::internal::StringTableShape>::NewInternal(v8::internal::Isolate*, int, v8::internal::PretenureFlag) [./../node/bin/node]
 7: v8::internal::HashTable<v8::internal::StringTable, v8::internal::StringTableShape>::New(v8::internal::Isolate*, int, v8::internal::PretenureFlag, v8::internal::MinimumCapacity) [./../node/bin/node]
 8: v8::internal::HashTable<v8::internal::StringTable, v8::internal::StringTableShape>::EnsureCapacity(v8::internal::Handle<v8::internal::StringTable>, int, v8::internal::PretenureFlag) [./../node/bin/node]
 9: v8::internal::StringTable::LookupString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>) [./../node/bin/node]
10: v8::internal::LookupIterator::PropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*, v8::internal::LookupIterator::Configuration) [./../node/bin/node]
11: v8::internal::Runtime_SetProperty(int, v8::internal::Object**, v8::internal::Isolate*) [./../node/bin/node]
12: 0x22a4d09842fd

发现是前端 js 报的内存 oom 异常,通过网上资料发现node.js 的默认内存大小为1.4g

Node 中通过 JavaScript 使用内存时只能使用部分内存(64位系统下约为1.4 GB,32位系统下约为0.7 GB),这就是我们编译项目时为什么会出现内存泄露了,因为前端项目如果非常的庞大,webpack 编译时就会占用很多的系统资源,如果超出了V8对 Node 默认的内存限制大小就会出现node内存溢出的报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

进入 kibana/bin 目录(也可以设置在 node 的环境变量里,我是加在 kibana 文件中)

vi kibana

添加内存空间的环境变量(以下 size 为1g,根据实际情况修改)

NODE_OPTIONS="--max-old-space-size=12288"

https://segmentfault.com/a/1190000017972349

https://banyudu.com/posts/dynamic-change-nodejs-memory-limit.3c34c2

https://forum.search-guard.com/t/kibana-7-6-memory-issue-with-sg/1814

原文地址:https://www.cnblogs.com/oldboyooxx/p/14276483.html