解決ES因內存不足而無法查詢的錯誤,Data too large, data for [ ]


本解決方案的前提是在docker環境下

錯誤詳情:

[type=circuit_breaking_exception, reason=[parent] Data too large, data for [<http_request>] would be [125643918/119.8mb], which is larger than the limit of [90832896/86.6mb], real usage: [125639936/119.8mb], new bytes reserved: [3982/3.8kb], usages [request=0/0b, fielddata=0/0b, in_flight_requests=3982/3.8kb, accounting=15713/15.3kb]] ElasticsearchStatusException[Elasticsearch exception [type=circuit_breaking_exception, reason=[parent] Data too large, data for [<http_request>] would be [125643918/119.8mb],

在這里找到了3個數值
Data too large, data for [<http_request>] would be [125643918/119.8mb] 這個就是上限內存(缺省是它是ES最大內存的95%)
real usage: [125639936/119.8mb], ES已經使用的內存
new bytes reserved: [3982/3.8kb] 本次查詢需要的內存

自己也百度了一些解答,如下:

1。增加ES的JVM內存大小,文件在 /config/jvm.options

把這兩個值改大一點
-Xms1g
-Xmx1g
改了之后使用docker restart elasticsearch 重啟,還是不行,並且報的數值都差不多,說明內存根本沒有生效

2。修改緩沖區

PUT /_cluster/settings
{
"persistent": {
"indices.breaker.fielddata.limit": "60%"
}
}

PUT /_cluster/settings
{
"persistent": {
"indices.breaker.request.limit": "40%"
}
}

PUT /_cluster/settings
{
"persistent": {
"indices.breaker.total.limit": "70%"
}
}

也沒用

解決辦法

思路1,我想了一下會不會是docker限制了容器的內存大小,查閱資料后發現docker默認不限制容器內存大小的。

思路2,我百度了docker查看啟動容器的命令的指令 ps -fe,發現啟動ES的命令行中發現了 -Xms64m -Xmx128m ,然后結合內存不夠的數值,也差不多能對上,那肯定就是docker啟動命令的問題了,雖然你修改了ES在JVM文件中的內存大小,但是可能
docker restart 重啟的時候還是用的docker run的指令,所以導致設置的內存大小沒有應用成功。

解決:
docker stop 容器 停止容器
docker rm 容器 刪除容器
最后在命令行重新指定內存大小
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms3g -Xmx3g" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM