1. ELASTICSEARCH建索引过程中崩溃问题追查
by LINECONG
前天用elasticsearch重建索引,总是在凌晨崩溃,ES甩出一坨java_pid[PID].hprof的文件,然后退出。查看日志,有java OutOfMemoryError的错误信息。用如下命令查看索引状态,发现在建的索引健康状态为red。
curl http://localhost:9200/_cat/indices?v
推测这是由于建索引太慢,redis队列阻塞,占据了太大内存而导致内存不足。于是删掉索引重建,并测控内存状况。今天凌晨又崩溃了,但此时redis占用的内存并不大。
发现日志中有“no index mapper found for field: [afv.好惹]”,于是想起前几天的升级索引,增加了一个afv的字段,这个字段是一个dict,dict的key是各种可能的关键词,由于关键词非常多,每一个关键词都会在mapping中生成一个”afv.[关键词]“的field,这会导致ES得到一个非常庞大的mapping,从而内存不足退出。
于是将afv这个字段用json方式转为string类型,从而避免生成”afv.[关键词]“这样的field。并用如下的mapping设置,将afv这个字段设置为不建索引。
mapping = { 'afv': { 'index': 'no', 'store': 'yes', 'type': 'string' } }
重建索引后,一切顺利,CPU占用率也小了很多。
2. ElasticSearch报错None of the configured nodes are available
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
使用地方的代码是:
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("172.16.2.13", 9300));
经查,最后的问题在于前面初始化settings时给cluster设置了个新的名字,如:Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "tonsonmiao").build();
因为如果设置clustername后,容器会在添加transportaddress时,从集群名为tonsonmiao里查找是否有要设置的这个IP和端口,此时肯定找不到,所以会报这个错。
将这个重命名给去掉即可。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com