我一直在服务器上遇到 Solr 崩溃的问题。它几乎不是一个繁忙的网站,所以我很困惑为什么一直这样做。
无论如何,作为一个中介 - 我写了一个以root身份在cron上运行的shell脚本:
#!/bin/bash
declare -a arr=(tomcat7 nginx mysql);
for i in "${arr[@]}"
do
echo "Checking $i"
if (( $(ps -ef | grep -v grep | grep $i | wc -l) > 0 ))
then
echo "$i is running!!!"
else
echo "service $i start\n"
service $i start
fi
done
# re-run, but this time do a restart if its still not going!
for i in "${arr[@]}"
do
echo "Checking $i"
if (( $(ps -ef | grep -v grep | grep $i | wc -l) > 0 ))
then
echo "$i is running!!!"
else
service $i restart
fi
done
..然后这个cron(作为root)
*/5 * * * * bash /root/script-checks.sh
cron本身似乎运行良好:
Checking tomcat7
service tomcat7 start\n
Checking nginx
nginx is running!!!
Checking mysql
mysql is running!!!
Checking tomcat7
Checking nginx
nginx is running!!!
Checking mysql
mysql is running!!!
......和Tomcats的状态似乎还不错:
root@domain:~# service tomcat7 status
â tomcat7.service - LSB: Start Tomcat.
Loaded: loaded (/etc/init.d/tomcat7)
Active: active (exited) since Mon 2016-03-21 06:33:28 GMT; 4 days ago
Process: 2695 ExecStart=/etc/init.d/tomcat7 start (code=exited, status=0/SUCCESS)
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
...但是我的脚本无法连接到Solr:
Could not parse JSON response: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "Can't connect to loc...") at /srv/www/domain.net/www/cgi-bin/admin/WebService/Solr/Response.pm line 42. Can't connect to localhost:8080 Connection refused at /usr/share/perl5/LWP/Protocol/http.pm line 49.
如果我手动运行“重启”:
service tomcat7 restart
......然后它再次开始工作。它几乎就像我的shell脚本中的第二部分不起作用。
有什么建议吗?
我的Solr版本如下:
Solr Specification Version: 3.6.2.2014.10.31.18.33.47
Solr Implementation Version: 3.6.2 debian - pbuilder - 2014-10-31 18:33:47
Lucene Specification Version: 3.6.2
更新:我读过有时更新 maxThreads 可以帮助解决崩溃问题,所以我已将其更改为10,000:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="10000" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
我想时间会证明这是否可以解决问题。
答案 0 :(得分:0)
好吧,我从来没有明白为什么它不会重新启动...但我已经弄清楚它为什么会崩溃。之前,我们在2048mb RAM Linode服务器上使用它,但是当我们转移到Apache2时,我设置了一个1024Mb的服务器,并且要将它升级到2048mb,我们已经完成了所有工作。但是,我们把它放到了现场 - 但是我忘了将它更新到2048mb服务器,所以Nginx / Apache2 / Tomcat / MySQL等都试图在一个非常慢的服务器上运行。
我们发现Solr因OOM(内存不足)错误而死亡,这就是我们的线索。
希望这有助于其他可能遇到此问题的人。