Apache 负载测试web应用程序时出现异常

Apache 负载测试web应用程序时出现异常,apache,tomcat,jersey,load-testing,Apache,Tomcat,Jersey,Load Testing,我们正在使用TomcatServlet容器和Jersey作为RESTful服务引擎开发一个web应用程序。该应用程序部署在两个tomcat节点上,通过它们前面的单个apache Web服务器和作为负载平衡器的mod_代理进行访问 在系统负载中等的情况下(大约数千名用户查询应用程序),catalina.out日志文件中有时会出现以下错误,我们对此不了解。处理器负载

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

在系统负载中等的情况下(大约数千名用户查询应用程序),catalina.out日志文件中有时会出现以下错误,我们对此不了解。处理器负载<20%,内存非常空闲。如果有人能为我们指出寻找问题的正确方向,那就太好了。谢谢!下面是错误日志:


3131392:27.Apr 17:20:05.827错误ContainerResponse-MappableContainerException中包含的异常无法映射到响应,将重新引发到HTTP容器
3131393-java.io.IOException
3131394-org.apache.jk.common.JkInputStream.receive(JkInputStream.java:205)
3131395-org.apache.jk.common.JkInputStream.doRead(JkInputStream.java:179)
3131396-org.apache.coyote.Request.doRead(Request.java:428)
3131397-位于org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304)
3131398-org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405)
3131399-org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327)
3131400-org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162)
3131401-位于com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:114)
3131402-位于com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76)
3131403-位于com.sun.jersey.core.impl.provider.entity.ByteArrayProvider.readFrom(ByteArrayProvider.java:79)
3131404-位于com.sun.jersey.core.impl.provider.entity.ByteArrayProvider.readFrom(ByteArrayProvider.java:59)
3131405-位于com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:456)
3131406-位于com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
3131407-位于com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
3131408-位于com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:138)
3131409-位于com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker.\u dispatch(AbstractResourceMethodDispatchProvider.java:185)
3131410-位于com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:71)
3131411-位于com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:280)
3131412-位于com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
3131413-位于com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
3131414-位于com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
3131415-位于com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
3131416-com.sun.jersey.server.impl.application.WebApplicationImpl.\u handleRequest(WebApplicationImpl.java:1341)
3131417-com.sun.jersey.server.impl.application.WebApplicationImpl.\u handleRequest(WebApplicationImpl.java:1273)
3131418-位于com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1223)
3131419-com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1213)
3131420-com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
3131421-com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
3131422-com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)

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

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

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();

    }

}
import java.net.SocketTimeoutException;
导入javax.ws.rs.core.Response;
导入javax.ws.rs.core.Response.Status;
导入javax.ws.rs.ext.ExceptionMapper;
导入javax.ws.rs.ext.Provider;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
@提供者
公共类SocketTimeoutExceptionMapper实现ExceptionMapper{
公众响应(SocketTimeoutException e){
Logger Logger=LoggerFactory.getLogger(this.getClass());
debug(“读取超时”);
返回Response.status(status.BAD_REQUEST.build();
}
}