我有一个在AWS Beanstek(Tomcat 8.5 Apache httpd)中运行的Java应用程序。
在某一点上,应用程序调用本地主机上的RESTendpoint。
偶尔我在日志中看到这样的失败:
14:55:45 ... SEVERE: url[http://localhost/detail.api?id=200030599] timing=12.010 ...
这表明我的CustomRestTemplate在12秒后放弃了等待响应。
但是,查看日志中的几行,我看到了来自服务endpoint的日志条目:
{
"server_ts": "2020-08-19T14:55:33.890Z",
"remote_ip": "127.0.0.1",
"local_ip": "127.0.0.1",
"method": "GET",
"url": "/detail.api",
"query_string": "?id=200030599",
"protocol": "HTTP/1.1",
"http_status": 200,
"referer": null,
"user_agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_252)",
"time_elapsed": 5,
"thread_name": "http-nio-8080-exec-20",
"host": "localhost",
}
这是我的自定义servlet记录器,显示5毫秒的响应。这是从外部包装Servlet Filter记录的。
这个问题反复出现,但足够罕见,我无法重现。所以我需要采取一种智力方法......开发一系列假设和测试来反驳每一个假设,直到找到正确的假设。
可能的原因是什么?
到目前为止我试过什么
我编写了自定义记录器,这样我就可以捕获上面显示的时间。然后我基本上碰壁了,因为超时发生在“服务器”(localhostendpoint)发送的响应和客户端读取的响应之间的某个隐藏维度上。
我看到Apache日志(来自elasticbeanstack)也显示了本地请求:
127.0.0.1 (-) - - [19/Aug/2020:14:55:33 +0000] "GET /detail.api?id=200030599 HTTP/1.1" 200 4982 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_252)"
最后,我能够使用JMeter在本地测试中再现这个问题。
事实证明,“隐藏维度”隐藏在Servlet过滤器中:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long started = System.currentTimeMillis();
chain.doFilter(request, response);
long elapsed = System.currentTimeMillis() - started;
log(request, response, elapsed);
}
调用包含一个同步数据库插入,该插入会减慢速度,并在负载下最终失败。我假设servlet引擎保持连接打开,直到这个过滤器返回。调查现在继续寻找解决方案。
我有一个ColdFusion事件网关,有时会在以下行产生错误(其中Local.cur线程是数字1-5): 错误是: 消息:超时值为负。类型:java。lang.IllegalArgumentException 这是StackTrace: Java语言lang.IllegalArgumentException:java的超时值为负。lang.Object。在coldfusion上等待(本机方法)。运
我的nginx版本是: 我的应用程序安装在 当我访问 它工作正常。这是因为服务器根设置为; 现在我想使用。当我将服务器根目录更改为并键入上述URL时,它会使用http 302重定向到 这可能是什么原因? 然后,它将应用我的应用程序中的其他规则。conf并给出一个404。 我在访问日志中看到: 我的conf文件是:
问题内容: 命令的帮助菜单显示该选项是选择“服务器” VM。它还指出“服务器”是默认选项。为什么这么多余? 编辑: 如果有帮助,“ java -version”将产生: 问题答案: 并在现代JVM上被 忽略, 就这么简单。有两种 编译器 和,但也有5 层 ,整个荣耀所有的细节都在这里的评论。 使用这些标志来控制如何以及将采取行动-禁用与否; 现在由另外两个标志控制:-
好的,正如你所看到的,即使我将等待时间设置为0.1秒,仍然没有引发超时异常。当执行时,它不会阻塞,直到整个页面加载完毕,这就是为什么出现了,令我惊讶的是,等到整个页面加载。如果使用,则会得到相同的结果。 我的观点是,有时候在你点击一个元素之后,可能会因为一个坏的代理而需要几个小时才能加载一个页面,而且你显然不想等待那么长时间,你想要的是一个超时异常。在这种情况下,您将如何使其工作?
我的模拟模型中有在GIS空间漫游的代理。我建立了一个参数变化实验来产生复制。在运行期间,我收到了四条通知,“服务器没有响应。连接超时。”然而,模拟一直在运行,它仍然产生了结果。这个错误的影响是什么?为什么会这样? 我的路由是从开源地图服务器请求的,路由服务器选项是AnyLogic。
Logcat消息: java.lang.IllegalStateException:在Android的父上下文或祖先上下文中找不到方法@={()->ViewModel.OnBtnClicked()(View):在id为“button”的视图类AndroidX.AppCompat.Widget.AppCompatButton上定义的OnClick属性 文件1:activity_main.xml 文件