把测试环境的Elasticsearch升级到1.5.1版本,启动的时候报错:

[root@node2 elasticsearch-1.5.1]# bin/service/elasticsearch start
Starting Elasticsearch…
Waiting for Elasticsearch……
WARNING: Elasticsearch may have failed to start.

到日志里看,发现这样的异常:

[ERROR][bootstrap ] Exception
java.lang.RuntimeException: Java version: 1.7.0_51 suffers from critical bug
https://bugs.openjdk.java.net/browse/JDK-8024830 which can cause data corruption. Please upgrade the JVM, see http://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html for current recommendations.
If you absolutely cannot upgrade, please add -XX:-UseSuperWord to the JVM_OPTS environment variable.
Upgrading is preferred, this workaround will result in degraded performance.
at org.elasticsearch.bootstrap.JVMCheck.check(JVMCheck.java:121)
at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:211)
at org.elasticsearch.bootstrap.ElasticsearchF.main(ElasticsearchF.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:290)

测试环境的jdk使用的是1.7.0_51版本,这个版本有个bug,可能引起Lucene崩溃,造成seg文件或者index文件损坏。Elasticsearch建议升级jdk的版本,或者在启动命令中设置-XX:-UseSuperWord,关闭UseSuperWord功能,可以避免这个bug。

于是修改Elasticsearch的启动设置,打开bin/service/elasticsearch.conf, 增加下面的设置:

wrapper.java.additional.10=-XX:-UseSuperWord

然后启动:

[root@node2 elasticsearch-1.5.1]# bin/service/elasticsearch start
Starting Elasticsearch…
Waiting for Elasticsearch……
running: PID:3283

好了启动起来了。看一下jvm进程的状态:

[root@node2 elasticsearch-1.5.1]# jinfo 3285
Attaching to process ID 3285, please wait…
Debugger attached successfully. Server compiler detected. JVM version is 24.51-b03
…memes….
-Delasticsearch-service -Des.path.home=/server/elasticsearch-1.5.1 -Xss256k -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
-XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -XX:-UseSuperWord -Xms1024m -Xmx1024m
-Djava.library.path=/server/elasticsearch-1.5.1/bin/service/lib -Dwrapper.key=7w8xGTzSEUve1FvC
-Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999
-Dwrapper.disable_console_input=TRUE -Dwrapper.pid=3283 -Dwrapper.version=3.5.14
-Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10
-Dwrapper.jvmid=1

可以看到-XX:-UseSuperWord指令已经生效了,Elasticsearch已经启动成功了。可是去掉UseSuperWord特性有没有负面的影响呢?查了一下,UseSuperWord的功能是这样的:

http://search-lucene.com/m/l6pAi13MPrt1BjCmN1&subj=Crazy+Solr+startup+params+please+review

摘要如下:

“-XX:-UseSuperWord If you have a Haswell CPU, all other improvements in these command line settings are eaten up by this flag! If you have 7u55 at minimum, you should never disable this. Things like BooleanFilter and other bitset operations are up to 2 times faster with Java 7u55 on Haswell CPUs and later!!! This setting only makes sense if you have one of those buggy JDKs (7u40 to 7u51). In all other cases this slows down enormous! In addition, enabling this option may break JDKs before 7u40 (this option was added in 7u40), so breaks:

It would be good, if we could fix the startup scripts not not have options, which may also break with JDK 8 or later!”

大概是这样的意思:UseSuperWord会在字节运算时启用布隆过滤器之类的特性,能在haswell架构的cpu上提高2倍以上的速度。看来这个功能还是开启的好。最好的方式还是升级jdk的版本到1.7.0_51以上。

Elasticsearch升级1.5版本暴露jdk的bug的更多相关文章

  1. tomcat 8.0安装ssl证书,及centos7.2 的openssl升级到最新版本,及ERR_SSL_OBSOLETE_CIPHER错误解决

    openssl官网https://www.openssl.org/source/下载最新的文件 2017-Feb-16 12:03:39 openssl-1.1.0e.tar.gz 安装的时候,可能由 ...

  2. 一台电脑安装多个版本的jdk

    我们平时在做Java开发的时候,有时需要使用多个版本的jdk, 那么一台电脑上需要安装多个JDK了. 那一台电脑上可不可以同时安装多个版本的jdk呢? 答案是可以的! 但使用的时候,只能使用一个,不能 ...

  3. 20160303 - 升级 Windows 10 版本 1511 后,文件夹默认打开方式为 cmd 的修复

    问题描述:升级 Windows 10 版本 1511 (OS 内部版本 10586.122)后,文件夹的默认打开方式变成了cmd.双击任何一个文件夹,显示相关的提示错误信息如下: [Window Ti ...

  4. windows下使用批处理脚本实现多个版本的JDK切换

    一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所 ...

  5. InstallShield 2012 Spring优惠升级到最新版本(2015.4.30之前)

    InstallShield 2012 Spring即将EOF,所以仍在使用InstallShield 2012 Spring的用户请注意下面内容: InstallShield 2012 Spring升 ...

  6. sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)

    最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件,现在需要 附加到sqlserver2012,经过网上一顿搜索,把完整的过程奉上,供大家参考 首先创建数据库 再设置数据库的 ...

  7. 转】windows下使用批处理脚本实现多个版本的JDK切换

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...

  8. AMH4.2免费版手动编译升级Nginx1.8版本方法

    从AMH免费版本停留在4.2版本之后就没有进行更新和升级,而且官方提供的解决文档也比较少,毕竟免费且没有盈利的产品还是没有多少兴趣的.但是,对于大部分网站环境来说,安装和使用AMH4.2免费版本还是够 ...

  9. struts升级到最高版本后遇到的问题。关于actionmessage传递问题。

    Struts2升级到最新版本遇到的一些问题 首先是更换对应的jar,如asm.common.ongl.struts等等.更换后发现系统启动不了,按照网上的介绍,先后又更新了slf4j-log4j12- ...

随机推荐

  1. 【学】jQuery的源码思路6——增加each,animaion,ajax以及插件机制

    each() 插件机制 animation ajax //each() //这里第一个参数指定将this指向每次循环到的那个元素身上,而第三个参数element其实就是this本身所以和第一个参数是一 ...

  2. OAF_文件系列9_实现OAF解析Excel并读取至数据库JXL

    ddd puroder. webui. poLineExcelImport.java

  3. 使用jedis操作redis

    一 连通性 1. 简单代码测试连通性 Jedis jedis = new Jedis(".......", 6379); String keys = "name" ...

  4. 无废话WCF

    1.什么是WCF 2.WCF应用的通信过程 3.WCF宿主 4.WCF配置文件 5.WCF通信模式 6.一个简单的DEMO

  5. python Queue模块

    先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...

  6. Unity3d之json解析研究

    Unity3d之json解析研究     json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式      JSON简单易用,我要好好研究一下 ...

  7. jQuery MiniUI开发系列之:Ajax处理超时、服务端错误

    MiniUI所有组件的ajax交互,均使用标准.成熟的jQuery.ajax. 依赖于jquery ajax组件的完善性,我们可以拦截住每一次ajax请求处理. 比如,拦截ajax返回数据前,判断返回 ...

  8. linux中mysql运程连接时错误host ‘192.168.0.1’ is not allowed to connect to this MySql server

    1.改表法 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "u ...

  9. WORD的公式无法与文字对齐

    在使用Mathtype编辑公式后,经常出现以下公式与文字无法对齐的问题: 可以使用以下方式来解决:

  10. OpenGL 像素在内存中的排列方式

    在OpenGL中所有和图像像素有关的API(包括glTexImage2D, glReadPixels等)第一个像素从左下角开始,从左到又一次排列,满了从下到上排列. 这个和Windows 下惯用的左上 ...