【问题标题】:Strange Jersey exceptions when load testing our web application负载测试我们的 Web 应用程序时出现奇怪的 Jersey 异常
【发布时间】:2012-02-20 21:51:38
【问题描述】:

我们正在开发一个使用 tomcat servlet 容器和 Jersey 作为 RESTful 服务引擎的 Web 应用程序。该应用程序部署在两个 tomcat 节点上,通过它们前面的单个 apache 网络服务器和 mod_proxy 作为负载平衡器访问。

在系统负载中等的情况下(数千名用户查询应用程序),catalina.out 日志文件中有时会出现以下错误,我们无法理解。处理器负载

3131392:27.Apr 17:20:05.827 ERROR ContainerResponse - The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container 3131393-java.io.IOException 3131394- at org.apache.jk.common.JkInputStream.receive(JkInputStream.java:205) 3131395- at org.apache.jk.common.JkInputStream.doRead(JkInputStream.java:179) 3131396- at org.apache.coyote.Request.doRead(Request.java:428) 3131397- at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304) 3131398- at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405) 3131399- at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327) 3131400- at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162) 3131401- at com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:114) 3131402- at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76) 3131403- at com.sun.jersey.core.impl.provider.entity.ByteArrayProvider.readFrom(ByteArrayProvider.java:79) 3131404- at com.sun.jersey.core.impl.provider.entity.ByteArrayProvider.readFrom(ByteArrayProvider.java:59) 3131405- at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:456) 3131406- at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) 3131407- at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46) 3131408- at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:138) 3131409- at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 3131410- at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:71) 3131411- at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:280) 3131412- at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 3131413- at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 3131414- at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 3131415- at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 3131416- at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1341) 3131417- at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1273) 3131418- at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1223) 3131419- at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1213) 3131420- at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414) 3131421- at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 3131422- at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)

【问题讨论】:

    标签: apache tomcat jersey load-testing


    【解决方案1】:

    我也有同样的例外。客户端启动请求,但(可能是连接缓慢或断开连接)没有完成请求。

    您可以避免使用此异常映射器接收错误日志:

    import java.net.SocketTimeoutException;
    
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.Response.Status;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Provider
    public class SocketTimeoutExceptionMapper implements ExceptionMapper<SocketTimeoutException> {
    
       public Response toResponse(SocketTimeoutException e) {
    
            Logger logger = LoggerFactory.getLogger(this.getClass());
            logger.debug("Read timed out.");
    
            return Response.status(Status.BAD_REQUEST).build();
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多