聊聊Elasticsearch的BootstrapCheck
序
本文主要研究一下Elasticsearch的BootstrapCheck
BootstrapCheck
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/bootstrap/BootstrapCheck.java
public interface BootstrapCheck {/*** Encapsulate the result of a bootstrap check.*/final class BootstrapCheckResult {private final String message;private static final BootstrapCheckResult SUCCESS = new BootstrapCheckResult(null);public static BootstrapCheckResult success() {return SUCCESS;}public static BootstrapCheckResult failure(final String message) {Objects.requireNonNull(message);return new BootstrapCheckResult(message);}private BootstrapCheckResult(final String message) {this.message = message;}public boolean isSuccess() {return this == SUCCESS;}public boolean isFailure() {return !isSuccess();}public String getMessage() {assert isFailure();assert message != null;return message;}}/*** Test if the node fails the check.** @param context the bootstrap context* @return the result of the bootstrap check*/BootstrapCheckResult check(BootstrapContext context);default boolean alwaysEnforce() {return false;}}
复制代码
- BootstrapCheck接口定义了check方法,该方法返回BootstrapCheckResult,另外还定义了一个default方法alwaysEnforce,默认返回false
BootstrapChecks
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/bootstrap/BootstrapChecks.java
final class BootstrapChecks {private BootstrapChecks() {}static final String ES_ENFORCE_BOOTSTRAP_CHECKS = "es.enforce.bootstrap.checks";//......// the list of checks to executestatic List<BootstrapCheck> checks() {final List<BootstrapCheck> checks = new ArrayList<>();checks.add(new HeapSizeCheck());final FileDescriptorCheck fileDescriptorCheck= Constants.MAC_OS_X ? new OsXFileDescriptorCheck() : new FileDescriptorCheck();checks.add(fileDescriptorCheck);checks.add(new MlockallCheck());if (Constants.LINUX) {checks.add(new MaxNumberOfThreadsCheck());}if (Constants.LINUX || Constants.MAC_OS_X) {checks.add(new MaxSizeVirtualMemoryCheck());}if (Constants.LINUX || Constants.MAC_OS_X) {checks.add(new MaxFileSizeCheck());}if (Constants.LINUX) {checks.add(new MaxMapCountCheck());}checks.add(new ClientJvmCheck());checks.add(new UseSerialGCCheck());checks.add(new SystemCallFilterCheck());checks.add(new OnErrorCheck());checks.add(new OnOutOfMemoryErrorCheck());checks.add(new EarlyAccessCheck());checks.add(new G1GCCheck());checks.add(new AllPermissionCheck());checks.add(new DiscoveryConfiguredCheck());return Collections.unmodifiableList(checks);}//......
}
复制代码
- BootstrapChecks的checks方法返回了一系列BootstrapCheck,其中包括HeapSizeCheck、FileDescriptorCheck、MaxNumberOfThreadsCheck、MaxSizeVirtualMemoryCheck、MaxFileSizeCheck等
FileDescriptorCheck
static class FileDescriptorCheck implements BootstrapCheck {private final int limit;FileDescriptorCheck() {this(65535);}protected FileDescriptorCheck(final int limit) {if (limit <= 0) {throw new IllegalArgumentException("limit must be positive but was [" + limit + "]");}this.limit = limit;}public final BootstrapCheckResult check(BootstrapContext context) {final long maxFileDescriptorCount = getMaxFileDescriptorCount();if (maxFileDescriptorCount != -1 && maxFileDescriptorCount < limit) {final String message = String.format(Locale.ROOT,"max file descriptors [%d] for elasticsearch process is too low, increase to at least [%d]",getMaxFileDescriptorCount(),limit);return BootstrapCheckResult.failure(message);} else {return BootstrapCheckResult.success();}}// visible for testinglong getMaxFileDescriptorCount() {return ProcessProbe.getInstance().getMaxFileDescriptorCount();}}
复制代码
- FileDescriptorCheck要求max file descriptors不得小于65535
ClientJvmCheck
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/bootstrap/BootstrapChecks.java
static class ClientJvmCheck implements BootstrapCheck {@Overridepublic BootstrapCheckResult check(BootstrapContext context) {if (getVmName().toLowerCase(Locale.ROOT).contains("client")) {final String message = String.format(Locale.ROOT,"JVM is using the client VM [%s] but should be using a server VM for the best performance",getVmName());return BootstrapCheckResult.failure(message);} else {return BootstrapCheckResult.success();}}// visible for testingString getVmName() {return JvmInfo.jvmInfo().getVmName();}}
复制代码
- ClientJvmCheck要求jvm是server VM
G1GCCheck
static class G1GCCheck implements BootstrapCheck {@Overridepublic BootstrapCheckResult check(BootstrapContext context) {if ("Oracle Corporation".equals(jvmVendor()) && isJava8() && isG1GCEnabled()) {final String jvmVersion = jvmVersion();// HotSpot versions on Java 8 match this regular expression; note that this changes with Java 9 after JEP-223final Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+)-b\\d+");final Matcher matcher = pattern.matcher(jvmVersion);final boolean matches = matcher.matches();assert matches : jvmVersion;final int major = Integer.parseInt(matcher.group(1));final int update = Integer.parseInt(matcher.group(2));// HotSpot versions for Java 8 have major version 25, the bad versions are all versions prior to update 40if (major == 25 && update < 40) {final String message = String.format(Locale.ROOT,"JVM version [%s] can cause data corruption when used with G1GC; upgrade to at least Java 8u40", jvmVersion);return BootstrapCheckResult.failure(message);}}return BootstrapCheckResult.success();}// visible for testingString jvmVendor() {return Constants.JVM_VENDOR;}// visible for testingboolean isG1GCEnabled() {assert "Oracle Corporation".equals(jvmVendor());return JvmInfo.jvmInfo().useG1GC().equals("true");}// visible for testingString jvmVersion() {assert "Oracle Corporation".equals(jvmVendor());return Constants.JVM_VERSION;}// visible for testingboolean isJava8() {assert "Oracle Corporation".equals(jvmVendor());return JavaVersion.current().equals(JavaVersion.parse("1.8"));}}
复制代码
- G1GCCheck对oracle java8开启G1的话要求update是40以后,避免data corruption
小结
- BootstrapCheck接口定义了check方法,该方法返回BootstrapCheckResult,另外还定义了一个default方法alwaysEnforce,默认返回false
- BootstrapChecks的checks方法返回了一系列BootstrapCheck,其中包括HeapSizeCheck、FileDescriptorCheck、MaxNumberOfThreadsCheck、MaxSizeVirtualMemoryCheck、MaxFileSizeCheck等
- FileDescriptorCheck要求max file descriptors不得小于65535;ClientJvmCheck要求jvm是server VM;G1GCCheck对oracle java8开启G1的话要求update是40以后,避免data corruption
doc
- BootstrapCheck
转载于:https://juejin.im/post/5ced56d66fb9a07ebe74a151
聊聊Elasticsearch的BootstrapCheck相关推荐
- 聊聊Elasticsearch的ExponentiallyWeightedMovingAverage
序 本文主要研究一下Elasticsearch的ExponentiallyWeightedMovingAverage ExponentiallyWeightedMovingAverage elasti ...
- 聊聊elasticsearch的RoutingService
为什么80%的码农都做不了架构师?>>> 序 本文主要研究一下elasticsearch的RoutingService RoutingService elasticsearch ...
- 聊聊Elasticsearch的TimedRunnable
序 本文主要研究一下Elasticsearch的TimedRunnable TimedRunnable elasticsearch-7.0.1/server/src/main/java/org/ela ...
- 聊聊Elasticsearch的Iterables
为什么80%的码农都做不了架构师?>>> 序 本文主要研究一下Elasticsearch的Iterables Iterables elasticsearch-7.0.1/ser ...
- 聊聊Elasticsearch RestClient的RequestLogger
序 本文主要研究一下Elasticsearch RestClient的RequestLogger RequestLogger elasticsearch-7.0.1/client/rest/src/m ...
- 聊聊Elasticsearch的CachedSupplier
序 本文主要研究一下Elasticsearch的CachedSupplier CachedSupplier elasticsearch-7.0.1/server/src/main/java/org/e ...
- 聊聊Elasticsearch的NodesSniffer
序 本文主要研究一下Elasticsearch的NodesSniffer NodesSniffer elasticsearch-7.0.1/client/sniffer/src/main/java/o ...
- 聊聊Elasticsearch的RunOnce
序 本文主要研究一下Elasticsearch的RunOnce RunOnce elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/c ...
- 【ElasticSearch从入门到放弃系列 零】ElasticSearch看这一篇就够了
大数据时代系统和业务每分每秒都产生成千上万的数据,其存储一定是不能通过关系型数据库了,当然因为数据的持久性也不能存储到内存型Nosql数据库Redis中,我们通常会将这些数据存储在能够不丢失数据的非关 ...
最新文章
- Spring Boot Spring MVC 异常处理的N种方法
- 未来,谁来为AI开源买单?科技圈顶级码农是这样看的 | CCF C³-04@百度
- vmware安装linux不能和主机互通,Ubuntu18.04系统主机与虚拟机互通问题的解决方法...
- [渝粤教育] 四川大学 传统文化与人生修养 参考 资料
- 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc
- java 方法 示例_Java扫描仪具有示例的NextNextInt()方法
- 《电脑报》:中国“人肉搜索第一案”幕后之谜
- 学生每日计划表_学霸宅家都干什么?浙大学生近700份居家作息计划表泄露秘密...
- k8s核心技术-Helm(自定义chart部署)---K8S_Google工作笔记0047
- 救人无数七个心理寓言
- 思科路由器配置命令大全
- 国内使用php谷歌翻译_中英文谷歌翻译-PHP
- 《星际争霸》怀念星际历史上最强的队伍系列二
- ES(四)ES使用(基本查询、聚合查询)
- 传奇手游服务器搭建_如何架设一个传奇手游?需要那些东西?
- 月入万元的自由程序员 (转电脑报)
- Windows 11 已修复 AMD CPU 性能问题
- wxpython中表格顶角怎么设置_wxpython编程之 grid(数据表格) | 学步园
- nodejs 各版本下载地址
- android编辑图片和文字,微商图片和文字编辑器
热门文章
- vue上传图片文件到服务器,vue如何将quill图片上传到服务器
- python 二分查找函数_Python基础14_递归函数,二分查找
- Java写file文件上传,在线预览思路
- 利用navicat将数据库中的查询结果导出文件
- python如何画出多个独立的图片_python使用matplotlib:subplot绘制多个子图的示例
- excelexportentity中设置null不显示的方法_如何在 Creator3D 中切换模型贴图,超级简单!...
- java格式化到毫秒_java时间格式化到毫秒
- python以文本方式字节流_如何在Python3中将文本流编码为字节流?
- python网络爬虫程序_Python写的网络爬虫程序(很简单)
- lambda表达式 java求和_java 8 stream、lambda表达式对list操作分组、过滤、求和、最值、排序、去重...