httpclient Timeout für viele Anfragen

Um eine Webapplikation mit vielen Benutzern zu simulieren, habe ich eine for-Schleife verwendet. Ich weiß immer noch, dass dies ein einzelner Thread ist und so weiter. Mein Code ist unter

public CloseableHttpClient getHttpClient() {
        try{
            SSLContext context = null;
            TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }

                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
            } };

            try {
                context = SSLContext.getInstance("SSL");
            } catch (NoSuchAlgorithmException e1) {
                e1.printStackTrace();
            }
            try {
                context.init(null, trustAllCerts, new java.security.SecureRandom());
            } catch (KeyManagementException e1) {
                e1.printStackTrace();
            }

            SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
                      .register("https", sslConnectionFactory)
                      .register("http", new PlainConnectionSocketFactory()).build();

            PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
             // Increase max total connection to 200
             cm.setMaxTotal(20);
             // Increase default max connection per route to 20
             cm.setDefaultMaxPerRoute(10);
             RequestConfig defaultRequestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .build();
             CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).setConnectionManagerShared(true)
                     .setDefaultRequestConfig(defaultRequestConfig).build();
            return httpClient;
        }catch(Exception ce){

        }
        return null;
    }

Dann in Schleife verwende ich es wie unten

try{
for(int i=0;i<500;i++){
                client = getHttpClient();
request = new HttpPost("Some https URL");
              HttpResponse response = client.execute(request);
              int statusCode = response.getStatusLine().getStatusCode();
 if (statusCode == 200 ){
                    entity = response.getEntity();
                    String content = EntityUtils.toString(entity);
}
                else{
                    entity = response.getEntity();
                    String content = EntityUtils.toString(entity);
}}
catch(Exception ce){}
finally{
                  try {
                        EntityUtils.consume(entity);
                        request.releaseConnection();
                        client.close();
                        } catch (IOException e) {
                    }
              }

Ich erhalte eine Antwort für wenige Anfragen, während ich bei wenigen Anfragen mit einer Zeitüberschreitung beim Lesen einen Fehler erhalte. Wenn ich im Verbindungsmanager die maximale Verbindungsanzahl von 200 beibehalte, erhalte ich nur wenige Fehler, aber nicht so viele wie bei dieser Konfiguration. WAS ist, dass ich vermisse. Ausnahme unten

java.net.SocketTimeoutException: Zeitüberschreitung beim Lesen von java.net.SocketInputStream.socketRead0 (native Methode) bei java.net.SocketInputStream.read (SocketInputStream.java:152) bei java.net.SocketInputStream.read (SocketInputStream.java: 122) bei sun.security.ssl.InputRecord.readFully (InputRecord.java:442) bei sun.security.ssl.InputRecord.read (InputRecord.java:480) bei sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java : 946) bei sun.security.ssl.SSLSocketImpl.readDataRecord (SSLSocketImpl.java:903) bei sun.security.ssl.AppInputStream.read (AppInputStream.java:102) bei org.apache.http.impl.io.SessionInputBufferImpl. streamRead (SessionInputBufferImpl.java:139) at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer (SessionInputBufferImpl.java:155) at org.apache.http.impl.io.SessionInputBufferImpl.readLine (SessionInputBufferImpl.readLine) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead (DefaultHttpResponseParser.java:140) at org.apache.http.impl.conn.DefaultHttpResponseParser.pa rseHead (DefaultHttpResponseParser.java:57) at org.apache.http.impl.io.AbstractMessageParser.parse (AbstractMessageParser.java:261) at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader .apache.http.impl.conn.CPoolProxy.receiveResponseHeader (CPoolProxy.java:167) unter org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse (HttpRequestExecutor.java:272) unter org.apache.htecocol.java:272 (HttpRequestExecutor.java:124) um org.apache.http.impl.execchain.MainClientExec.execute (MainClientExec.java:271) um org.apache.http.impl.execchain.ProtocolExec.execute (ProtocolExec.java:184) um org.apache.http.impl.execchain.RetryExec.execute (RetryExec.java:88) at org.apache.http.impl.execchain.RedirectExec.execute (RedirectExec.java:110) at org.apache.http.impl. client.InternalHttpClient.doExecute (InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:82) at or g.apache.http.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:107) at com.ibm.indo.serviceImpl.GenericServiceImpl.checkDomRegNew (GenericServiceImpl.java:233) at com.ibm.indo.controller. checkDomRegNew (ReportsController.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImplor at java.lang.reflect.Method.invoke (Method.java:606) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandler .invokeForRequest (InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:110) at org.springframework.spring .im vokeHandleMethod (RequestMappingHandlerAdapter.java:776) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:705) at org.springframework.web.servlet.andvbst AbstractHandlerMethodAdapter.java:85) um org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:959) um org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:893) um org.spring.spring .servlet.FrameworkServlet.processRequest (FrameworkServlet.java:967) um org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:869) um javax.servlet.http.HttpServlet.service (HttpServlet.java: 75 org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:843) bei javax.servlet.http.HttpServlet.service (HttpServlet.java:847) bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilFil java: 329) bei oder g.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:248) bei org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:275) bei org.apache.catalina.core.Standard StandardContextValve.java:161) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke (SecurityContextAssociationValve.java:153) at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:155) .catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter (Adapter) : 368) unter org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:877) unter org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:671) util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:930) bei java.lang.Thread.run (Thread.java:745)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage