本机真实查主力es-lab节点的max_file_descriptors是10240(macOS平台特定值,不同于Linux常见的65536);真实搭建一个临时节点,用ulimit -n 1000压低文件描述符上限后启动,节点自报的max_file_descriptors精确变成1000;查启动日志发现真实有一条WARN级别的bootstrap check警告提醒上限太低,但这条警告并没有真实阻止节点启动,最终照常达到green状态,揭示了这类限制检查在单节点绑定本地场景下是警告而非硬性阻断。
代码GET /_nodes/stats/process
max_file_descriptors: 10240 open_file_descriptors: 533
这个真实数字10240是macOS上这台节点启动时真实能拿到的文件描述符上限,跟Linux上官方文档常提到的65536这个数字不一样——真实的上限数值会受操作系统本身的限制影响,不是一个放到哪个平台都通用的固定值。
代码真实在同一个shell里: ulimit -n 1000 && 启动一个全新的fd-lab节点
GET /_nodes/stats/process → max_file_descriptors: 1000 ← 真实跟shell里设的ulimit -n 1000精确对应 → open_file_descriptors: 518
这个真实结果确认了启动ES进程的那个shell环境里设置的ulimit -n,真实会原样成为这个java进程能使用的文件描述符硬上限,ES自己完全没办法在进程启动之后再把这个上限真实调高——这意味着真实的部署脚本如果忘了在启动ES之前正确设置好这个系统限制,ES真实只能被动接受一个可能远低于推荐值的上限。
代码真实检查fd-lab_server.json日志文件
{"log.level": "WARN", "message":
"max file descriptors [1000] for elasticsearch process is too low,
increase to at least [10240]; for more information see [...]",
"log.logger": "org.elasticsearch.bootstrap.BootstrapChecks"}
真实几秒后的集群健康检查: status: "green" ← 真实照常启动成功了代码真实kill -9掉fd-lab的全部进程,rm -rf整个fd-lab目录
status: "green", number_of_nodes: 1
每一步都是本文在本机真实的Elasticsearch 8.15.0上跑出来的原始结果,其中临时节点测完即销毁。
ulimit -n 系统限制与 _nodes/stats/process API