请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
文件描述符和 MMap
edit文件描述符和 MMap
editLucene 使用了 大量的 文件。 同时,Elasticsearch 在节点和 HTTP 客户端之间进行通信也使用了大量的套接字(注:sockets)。 所有这一切都需要足够的文件描述符。
可悲的是,许多现代的 Linux 发行版本,每个进程默认允许一个微不足道的 1024 文件描述符。这对一个小的 Elasticsearch 节点来说实在是太 低 了,更不用说一个处理数以百计索引的节点。
你应该增加你的文件描述符,设置一个很大的值,如 64,000。这个过程困难得让人恼火,它高度依赖于你的特定操作系统和分布。请参考你操作系统文档来确定如何最好地修改允许的文件描述符数量。
一旦你认为已经改变了它,检查 Elasticsearch,以确保它的真的起作用并且有足够的文件描述符:
GET /_nodes/process { "cluster_name": "elasticsearch__zach", "nodes": { "TGn9iO2_QQKb0kavcLbnDw": { "name": "Zach", "transport_address": "inet[/192.168.1.131:9300]", "host": "zacharys-air", "ip": "192.168.1.131", "version": "2.0.0-SNAPSHOT", "build": "612f461", "http_address": "inet[/192.168.1.131:9200]", "process": { "refresh_interval_in_millis": 1000, "id": 19808, "max_file_descriptors": 64000, "mlockall": true } } } }
Elasticsearch 对各种文件混合使用了 NioFs( 注:非阻塞文件系统)和 MMapFs ( 注:内存映射文件系统)。请确保你配置的最大映射数量,以便有足够的虚拟内存可用于 mmapped 文件。这可以暂时设置:
sysctl -w vm.max_map_count=262144
或者你可以在 /etc/sysctl.conf
通过修改 vm.max_map_count
永久设置它。