RHT*_*RHT 24 java apache weblogic httpclient java-ee
我不时地在日志中看到以下堆栈跟踪,HttpClient
套接字超时试图text/script
从另一个服务器访问内容.我的问题是我应该在Linux上检查在Weblogic上运行的J2EE应用程序的配置设置是什么?我特意寻找以下内容.
HttpClient
PARAMS这是我的代码
HTTPResponse httpClientResponse;
//do some stuff
httpClientResponse.getStatusCode(); // this is where it fails
Run Code Online (Sandbox Code Playgroud)
这就是堆栈跟踪
java.net.SocketTimeoutException: Read timed out
at jrockit.net.SocketNativeIO.readBytesPinned(Native Method)
at jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)
at java.net.SocketInputStream.socketRead0(SocketInputStream.java)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at HTTPClient.BufferedInputStream.fillBuff(BufferedInputStream.java:206)
at HTTPClient.BufferedInputStream.read(BufferedInputStream.java:126)
at HTTPClient.StreamDemultiplexor.read(StreamDemultiplexor.java:356)
at HTTPClient.RespInputStream.read(RespInputStream.java:147)
at HTTPClient.RespInputStream.read(RespInputStream.java:108)
at HTTPClient.Response.readResponseHeaders(Response.java:1123)
at HTTPClient.Response.getHeaders(Response.java:846)
at HTTPClient.Response.getStatusCode(Response.java:331)
at HTTPClient.RetryModule.responsePhase1Handler(RetryModule.java:92)
at HTTPClient.HTTPResponse.handleResponseImpl(HTTPResponse.java:872)
at HTTPClient.HTTPResponse.access$000(HTTPResponse.java:62)
at HTTPClient.HTTPResponse$2.run(HTTPResponse.java:839)
at HTTPClient.HTTPResponse$2.run(HTTPResponse.java:837)
at
HTTPClient.HttpClientConfiguration.doAction(HttpClientConfiguration.java:666)
at HTTPClient.HTTPResponse.handleResponse(HTTPResponse.java:837)
at HTTPClient.HTTPResponse.getStatusCode(HTTPResponse.java:242)
Run Code Online (Sandbox Code Playgroud)
谢谢
我将使用下面的调查结果更新我的问题.
HttpClient
这意味着服务器的http会话超时可能正在生效.SO_TIMEOUT
for HttpClient
为0表示它应该无限期地等待.Jos*_*seK 15
轨道1
根据javadocs,Httpclient似乎没有Socket超时的默认值.要在更新中回答问题 - 会话超时在此处不起作用.对于会话超时,Weblogic的默认值为30分钟.
服务器session timeout
表示HttpSession
如果用户未访问服务器,将在内存中保留的时间量.
该套接字超时是时间的量,以保持服务器套接字打开,而数据被传输给调用者.这甚至可能是服务器仍在处理和写回数据,但它花了相当长的时间,客户端刚刚等待它.
一些链接表明这个默认值是60秒,但是javadocs没有说什么,无论如何你可以将这个值设置为120秒,看它是否有帮助
你需要的是计算超时 - 如果这很清楚的话.含义 - 在传出请求的30秒,60秒或5分钟后是否出现这些错误?
我会更改SO_Timeout并再试一次
Track 2 - OS参数
对于NDD值,建议使用BEA参数来控制传入连接保持打开的时间长度以及排队的连接数等等.在Solaris上,这些是通过运行得到的
/usr/sbin/ndd -get /dev/tcp tcp_time_wait_interval
/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q
/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q0
/usr/sbin/ndd -get /dev/tcp tcp_ip_abort_interval
/usr/sbin/ndd -get /dev/tcp tcp_keepalive_interval
Run Code Online (Sandbox Code Playgroud)
您是否可以在Oracle文档中查看Linux上的等效命令,以及它们应设置的值.在Solaris上我的经验是缺省是不够的,他们需要提升到BEA(Oracle)的建议
第3轨:Weblogic /外部访问日志
您是否在服务器上启用了HTTP访问日志?这些失败的请求是否显示任何响应字节大小,或者它们是否显示0响应大小?返回了什么错误代码或HTTP状态代码?
或者这些超时的可能根本没有记录在访问日志中?
在这里,我假设发生超时的外部服务器也是Weblogic,如果没有 - 这个问题是针对他们的等效平台的外部服务器团队.
**其他**
通常线程转储有帮助,但是应该在具有超时问题的服务器上进行线程转储.您是客户端,并且您已成功获得连接,之后在读取响应时超时.那么外部服务器是否过载?缺乏线程?CPU高?并发请求太多了?
归档时间: |
|
查看次数: |
73218 次 |
最近记录: |