1. 程式人生 > >HTTP高並發調優小記

HTTP高並發調優小記

err ger lai close protoc ror 重連 read http

tomcat服務層

1.修改server.xml

<Connector port="8088" protocol="HTTP/1.1"
               maxThreads="1000"
               connectionTimeout="60000"
               acceptCount="1100"
               redirectPort="8443" />

2.修改catalina.bat

set JAVA_OPTS=-Xms1024m -Xmx2048m

Java應用層-Httpclient

1.修改連接池的連接數

static {
    LayeredConnectionSocketFactory sslsf 
= null; try { sslsf = new SSLConnectionSocketFactory(SSLContext.getDefault()); } catch (NoSuchAlgorithmException e) { logger.error("創建SSL連接失敗"); } Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register(
"https", sslsf) .register("http", new PlainConnectionSocketFactory()) .build(); cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry); // 設置連接池最大連接數800 cm.setMaxTotal(800); // 設置最大路由數10 cm.setDefaultMaxPerRoute(10); }

2.設置失敗重試次數

/**
   * getHttpClient
   * <p>通過連接池管理創建CloseableHttpClient</p>
   * 
@return */ private static CloseableHttpClient getHttpClient() { CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cm) .setUserAgent(properties.getProperty("userAgent")) // 失敗重連5次 .setRetryHandler(new DefaultHttpRequestRetryHandler(5, false)) .build(); return httpClient; }

3.設置連接超時時長

/**
   * config
   * <p>普通請求配置</p>
   * @param httpRequestBase
   */
  private static void config(HttpRequestBase httpRequestBase) {
    httpRequestBase.setHeader("Accept-Encoding", "gzip,deflate");
    // 配置請求的超時設置
    RequestConfig requestConfig = RequestConfig.custom()
        .setConnectionRequestTimeout(3000)
        .setConnectTimeout(3000)
        .setSocketTimeout(3000)
        .build();
    httpRequestBase.setConfig(requestConfig);
  }

HTTP高並發調優小記