nginx+tomcat数据不返回bug

环境

架构:nginx + Tomcat

框架:springMVC 

场景:导入账户之后爬取账户的数据

代码:

  response为HttpServletResponse

        //登录成功 下面代码将登录结果返回前端
        OutputStream outputStream = response.getOutputStream();
        String result = JsonUtils.writeObject2Json(responseVO);
        outputStream.write(result.getBytes());
        outputStream.flush();
        outputStream.close();
        //爬虫抓取数据

  bug详情:当response的流进行数据返回的时候,前端不能收到返回直接请求超时.同时爬虫代码已经开始运行!

  排查方案:

    1.爬虫代码有问题导致不返回.(方向是错的),将爬虫代码注释掉->正常返回

      一开始认为是内存问题,爬虫代码里有很多new对象的操作可能是将内存打满了;但是返回是瞬间的事情,爬虫不可能瞬间将内存打满.

    2.nginx配置有问题  本地测试前端和后端直接交互不通过nginx ->正常返回

      观察nginx日志 debug代码 当执行到outputStream.close()的时候nginx还没有收到返回的日志.同时代码继续往下跑(代码运行是正常的),nginx直到超时才落下200的日志.

    问题出在response往nginx返回的时候,当使用response返回的时候,且该条请求对应的线程未结束时,nginx是收不到返回的.当response返回,线程结束后才收到返回.

    原因:tomcat的response返回和mvc直接返回不太一样,导致nginx无法收到返回.最后还是没有发现这个问题的根源.

    解决方案:

    response.close之后的爬虫代码新建一个线程去跑.让请求对应的线程新建完线程之后就结束.(能正常返回)

posted @ 2017-11-15 16:53  阿逗  阅读(1154)  评论(0)    收藏  举报