solr_使用中遇到的问题(NoRouteToHostException)

线上服务器报错:

org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: http://127.0.0.1:8983/solr/harvewifi

Caused by: java.net.NoRouteToHostException: Cannot assign requested address

初步猜测是因为httpsolrclient 每次都会new一个新的出来,将端口占用了。

Linux下输入命令,可以查看可以使用的端口号范围:

cat  /proc/sys/net/ipv4/ip_local_port_range

        32768 - 61000

可见只有三万多个。

 

在本机上测试:

        for(int i = 0; i < 65000; ++i){

        System.out.println(i);

        SolrDocumentList solrDocumentList = solrDao.getResults(query);

        }

输出16299后就报错了:

org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: http://192.168.75.101:8983/solr/harvewifi

网上说windows下可用的端口号为:1024 65535

使用命令查看当前使用的端口号:netstat -a -n

发现当前起步就从59000多开始往上加,加到65000多就完了,刚好16000多点。

 

 

 因此可以断定,就是过多的httpsolrclient 占用端口导致的出错。

 

解决方案:

1.用完httpsolrclient 调用其close方法将其关闭

但同时要注意,端口此时为TIME_WAIT状态,默认60秒内才会释放,如果并发量太大还是会有问题,可以设置系统的TIME_WAIT的时间。

2.dao层使用    

@Resource

    private HttpSolrClient httpSolrClient;

这样就只有一个httpsolrclient,不要去动态new它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值