Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一段时间后,Tomcat停止使用其他API_Java_Spring_Tomcat_Resttemplate_Tomcat9 - Fatal编程技术网

Java 一段时间后,Tomcat停止使用其他API

Java 一段时间后,Tomcat停止使用其他API,java,spring,tomcat,resttemplate,tomcat9,Java,Spring,Tomcat,Resttemplate,Tomcat9,我正在努力使这个项目更加稳定。问题在于,在某种情况下,所有使用与其他API通信的代码都会停止工作。在我重新启动tomcat之前,我每隔几个小时(从4小时到几分钟,似乎取决于用户数量)要做什么。同时,接受GET(或任何其他)请求且在其活动期间不联系其他服务器的代码将继续工作。与其他服务器的通信丢失,并且此服务器上的其他项目丢失 服务器Ubuntu 12.04、nginx 1.12.0、tomcat 9.0.0.M26。 服务器上有12个java小项目。 Spring 5.0.4.RELEASE,h

我正在努力使这个项目更加稳定。问题在于,在某种情况下,所有使用与其他API通信的代码都会停止工作。在我重新启动tomcat之前,我每隔几个小时(从4小时到几分钟,似乎取决于用户数量)要做什么。同时,接受GET(或任何其他)请求且在其活动期间不联系其他服务器的代码将继续工作。与其他服务器的通信丢失,并且此服务器上的其他项目丢失

服务器Ubuntu 12.04、nginx 1.12.0、tomcat 9.0.0.M26。 服务器上有12个java小项目。 Spring 5.0.4.RELEASE,hibernate 5.2.16.Final,(PostgreSQL)9.6.3

我在不同的地方和不同的类型也会遇到许多其他错误,最常见的是NPE(因为缺少通信,我希望从另一台服务器获取的对象=null),有时我会收到HttpClientErrorException和状态400,尽管远程服务器总是以200的状态响应类似的请求。 在我当地的tomcat上,我从未遇到过类似的情况。这个问题困扰了我很长一段时间,情况越来越糟(用户越来越多-它破坏得更快),如果有任何建议,我将不胜感激。我为谷歌翻译道歉

从jstack转储线程-

下面是代码不工作时的jvisualvm线程


尝试升级到Tomcat 9.0.6。在9.0.0和9.0.6之间修复了几个bug。

它显示了所有与负载平衡相关的“连接配置”迹象

正如你所说,当它拥有大量用户时,它就会这样做。 但是,它似乎在某些网络请求中使用了某种类型的seralized RMI对象

序列化对象是java类对象,这些对象“加载到堆栈准备就绪后”将被移除到一个特殊的包中,以便通过网络传输,类似于移除一辆正在运行的车辆的发动机,并在其运行时移除发动机,然后将其放置在另一辆带有空发动机舱的车辆中,以便在其运行时连接发动机


RMI被称为“远程方法调用”,它意味着有一个非常谨慎的操作,即使用从另一台机器上运行的JVM到另一台网络上运行的JVM的预加载运行java类,在另一台远程机器上处理一个活动JVM

解决方案是将RestTemplate声明从全局移动到本地。除了添加的“application/json”值之外​​在RestTemplate中,还自动添加了“text/plain”和“/”。 在我的类中,收集了API访问方法,每次使用RestTemplate都会导致添加此信息,结果是头增长,直到我收到“请求头或Cookie太大”

对此给予更多的关注是对的,但症状很奇怪,让我很困惑。 现在我了解到,所有项目中同时出现的故障只是巧合,因为对其他服务器的调用数量大致相同。 重新加载tomcat很有帮助,因为头在开始时是干净的。 现在,每个方法都会创建自己的RestTemplate实例,并且不会在标头中累积这些添加的信息

感谢所有在聊天中帮助我并帮助我做出决定的人。
我还想指出这个问题(及其答案)在我的情况下非常有用-

OP甚至使用了里程碑版本,而不是正确的版本。我不会花一分钟去研究我正在做的事情:D。我也想过了,但没用。
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)