本文主要研究一下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相关推荐

  1. 聊聊Elasticsearch的ExponentiallyWeightedMovingAverage

    序 本文主要研究一下Elasticsearch的ExponentiallyWeightedMovingAverage ExponentiallyWeightedMovingAverage elasti ...

  2. 聊聊elasticsearch的RoutingService

    为什么80%的码农都做不了架构师?>>>    序 本文主要研究一下elasticsearch的RoutingService RoutingService elasticsearch ...

  3. 聊聊Elasticsearch的TimedRunnable

    序 本文主要研究一下Elasticsearch的TimedRunnable TimedRunnable elasticsearch-7.0.1/server/src/main/java/org/ela ...

  4. 聊聊Elasticsearch的Iterables

    为什么80%的码农都做不了架构师?>>>    序 本文主要研究一下Elasticsearch的Iterables Iterables elasticsearch-7.0.1/ser ...

  5. 聊聊Elasticsearch RestClient的RequestLogger

    序 本文主要研究一下Elasticsearch RestClient的RequestLogger RequestLogger elasticsearch-7.0.1/client/rest/src/m ...

  6. 聊聊Elasticsearch的CachedSupplier

    序 本文主要研究一下Elasticsearch的CachedSupplier CachedSupplier elasticsearch-7.0.1/server/src/main/java/org/e ...

  7. 聊聊Elasticsearch的NodesSniffer

    序 本文主要研究一下Elasticsearch的NodesSniffer NodesSniffer elasticsearch-7.0.1/client/sniffer/src/main/java/o ...

  8. 聊聊Elasticsearch的RunOnce

    序 本文主要研究一下Elasticsearch的RunOnce RunOnce elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/c ...

  9. 【ElasticSearch从入门到放弃系列 零】ElasticSearch看这一篇就够了

    大数据时代系统和业务每分每秒都产生成千上万的数据,其存储一定是不能通过关系型数据库了,当然因为数据的持久性也不能存储到内存型Nosql数据库Redis中,我们通常会将这些数据存储在能够不丢失数据的非关 ...

最新文章

  1. Spring Boot Spring MVC 异常处理的N种方法
  2. 未来,谁来为AI开源买单?科技圈顶级码农是这样看的 | CCF C³-04@百度
  3. vmware安装linux不能和主机互通,Ubuntu18.04系统主机与虚拟机互通问题的解决方法...
  4. [渝粤教育] 四川大学 传统文化与人生修养 参考 资料
  5. 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc
  6. java 方法 示例_Java扫描仪具有示例的NextNextInt()方法
  7. 《电脑报》:中国“人肉搜索第一案”幕后之谜
  8. 学生每日计划表_学霸宅家都干什么?浙大学生近700份居家作息计划表泄露秘密...
  9. k8s核心技术-Helm(自定义chart部署)---K8S_Google工作笔记0047
  10. 救人无数七个心理寓言
  11. 思科路由器配置命令大全
  12. 国内使用php谷歌翻译_中英文谷歌翻译-PHP
  13. 《星际争霸》怀念星际历史上最强的队伍系列二
  14. ES(四)ES使用(基本查询、聚合查询)
  15. 传奇手游服务器搭建_如何架设一个传奇手游?需要那些东西?
  16. 月入万元的自由程序员 (转电脑报)
  17. Windows 11 已修复 AMD CPU 性能问题
  18. wxpython中表格顶角怎么设置_wxpython编程之 grid(数据表格) | 学步园
  19. nodejs 各版本下载地址
  20. android编辑图片和文字,微商图片和文字编辑器

热门文章

  1. vue上传图片文件到服务器,vue如何将quill图片上传到服务器
  2. python 二分查找函数_Python基础14_递归函数,二分查找
  3. Java写file文件上传,在线预览思路
  4. 利用navicat将数据库中的查询结果导出文件
  5. python如何画出多个独立的图片_python使用matplotlib:subplot绘制多个子图的示例
  6. excelexportentity中设置null不显示的方法_如何在 Creator3D 中切换模型贴图,超级简单!...
  7. java格式化到毫秒_java时间格式化到毫秒
  8. python以文本方式字节流_如何在Python3中将文本流编码为字节流?
  9. python网络爬虫程序_Python写的网络爬虫程序(很简单)
  10. lambda表达式 java求和_java 8 stream、lambda表达式对list操作分组、过滤、求和、最值、排序、去重...