淘淘商城第62讲——不会吧!不会吧!在搭建Solr集群时,你不会还没碰到过Tomcat服务器的JVM内存太小引发的这些问题吧?
问题描述
作为一个小白,如果你按照我的《淘淘商城第59讲——搭建Solr集群,注意是Solr 7.1.0这个版本的哟!》这篇文章来搭建Solr集群,那么想必你会遇到一些各种各样的问题。真的,作为一个小白,要是碰到这些问题,如果你不想死,我只能说你头铁!各位知道吗?我本人遇到这些问题,是真的想跳楼啊!我真TM怀疑还有必要继续进行下去吗!但是抱怨归抱怨啊,回到主题,那么我碰到了哪些问题呢?而且我到底是怎么解决的呢?
所碰到的第一个问题
当我们搭建好Solr集群之后,然后访问任何一个Solr节点,接着我就想向索引库中添加一个文档试试,如下图所示。
当我点击Submit Document
按钮后,理应返回一个为success的状态,结果就是尼玛的不出现啊!给我弹出了这样一个小窗口,弹你妈啊!
想必很多人都有碰到过这样的小窗口,其实不必在意啦!刷新一下浏览器窗口应该就会消失,我是说理想情况下哟!
除此之外,在添加文档的过程中,我还发现浏览器窗口左上角Solr字样那儿一直有一个圈圈在转,就是下面这样子的啦!
我想应该是正在向索引库中添加文档吧!可是,我等了好久,大概几分钟吧!还是没有给我返回一个为success的状态。那这个时候,我再转去其他Solr节点去查询一下所有文档,只能说是在机缘巧合的情况下(也有可能上帝刚刚好站在了我这边),我查询到了我刚刚所添加的文档。
查不查询得到,真的只能看命了!或许这个时候,你突发奇想,想转去添加文档的那个Solr节点再看看,但你会看到什么呢?反正我TM的还是看到那样一个小窗口横亘在我前面,浏览器窗口左上角Solr字样那儿的小圈圈还是在继续转着,一切什么都没有改变!一切都是那么的死气沉沉!
这其实已然说明了咱们搭建的Solr集群是特别特别地不稳定的,但是Solr集群的搭建又是没有任何问题的,那么问题出现在了哪呢?
所碰到的第二个问题
真的,反正我碰到的问题真是千奇百怪,就比如说我访问任意一个Solr节点,结果就看到了下图所示的鬼样子。
又是一个小窗口横亘在我面前,浏览器窗口左上角Solr字样那儿的小圈圈还在继续转着,感觉是不是又回到了原来的起点啊!我不要这样了啦!????
其实,这个问题根本就不算是什么问题,刷新一下浏览器窗口应该就会消失的,不行你就狂刷呗!
真正有问题的是我在访问任意一个Solr节点,想查看新创建的Collection是如何进行分片处理的时候。TMD一会一个鸟样,比如说一会是下面这样。
一会又是那样,重复的样子能亮瞎你的钛合金狗眼,艹(一种植物)!这个时候,你可能会想,要不咱们干脆重启所有的Tomcat服务器吧!不过,咱必须得保证Zookeeper集群是启动的状态才行。其实,我也试过,还不止试过一遍,我就在那儿重复地关闭所有的Tomcat服务器再启动所有的Tomcat服务器,像个傻子。终于,黄天不负有心人,给我找到了一个完美状态的分片的Collection,鬼知道我有多感动!
但是这完美的样子又是那么短暂,稍微不留心,它就从你眼皮子底下溜走了!
这一切的种种都已表明,咱们搭建的Solr集群太不稳定了,但上面我也说了,Solr集群的搭建是没有任何问题的,那么问题出现在了哪呢?
报错原因
在最开始提的那篇文章中我明确指定了虚拟机的内存为1个G,只要你仔细地看了这篇文章就知道了,而且在下图中,我还给你明确标明出来了。
而正是这小小的一点才引发了后续一系列的问题。正所谓千里之堤,溃于蚁穴!!!
在搭建好Solr集群之后,访问任意一个Solr节点,你便会清楚地看到Solr的后台管理界面,如下图所示。
从上图中可以清楚地看到Tomcat服务器启动时,JVM内存太小了,是不是我们可以尝试着调整一下JVM的内存大小呢?说干咱们就干!
解决方案
想要在Tomcat服务器启动时,调整JVM的内存大小,属实不是一件简单的事,关键是笔者不会啊!别喷我!我在网上找了很多文章来看,也试过很多种方案,但都不行,在写这篇文章的时候,我突然后知后觉,也许网上的那些方案是真的可行,但是我为虚拟机分配的内存就1个G,而我在虚拟机上又部署了4台Tomcat服务器,这样一来,满打满算每一台Tomcat服务器至多就能占用256M的内存就不错了。所以,就算是你解决方案多,那又有什么用呢?真是应了那句话,巧妇难为无米之炊!!!
此刻,你是不是想到了解决方案了,那就是更改虚拟机的内存大小。如何更改虚拟机的内存大小呢?还请参考我的这篇文章——《Linux入门番外篇——如何在VMware中更改虚拟机的内存大小?》。
如果我们将为虚拟机分配的内存由1G调整到2G,那么当重启所有的Tomcat服务器之后(当然了,还必须得保证Zookeeper集群是启动的状态),访问任意一个Solr节点,你便会清楚地看到如下图所示的Solr后台管理界面。
至少现在,JVM的内存算是调高了,因为我本机的内存只有8G(机器不是太行),所以我为虚拟机分配的内存只有2G,我是真的怕我8G的内存不够用哈????
好了,调整了JVM的内存大小之后,会有什么不一样的地方呢?你会发现现在Solr集群还蛮稳定的,当我们访问任意一个Solr节点,然后尝试着向索引库中添加一个文档时,你会发现能添加成功,而且还给我们返回了一个为success的状态,如下图所示。
这个时候,假如再转去其他Solr节点去查询一下所有文档,你便能查询到了刚刚所添加的文档了。
最后再说一句,如果要是你本机的内存足够用,比如说有16G或者16G以上,那么不妨为虚拟机多分配一点内存,例如分配个4G大小的内存,相信你再也不会遇到我上面的那些问题了,整个世界都清净了!因此,我准备打算买个16G的内存条,然后安装到我笔记本电脑上,这样以后我再也不担心我内存不够用了,那必将是一片广阔的天地,我必然会有一番大的作为的!