美文网首页
HTTPClient带来的性能问题

HTTPClient带来的性能问题

作者: 彩虹妹妹qyf | 来源:发表于2018-05-07 17:35 被阅读123次

    一、问题描述
    最近在给项目做性能测试,高并发情况下,发现系统内存暴涨,而且吞吐量很低,基本只有100tps。

    二、问题分析
    原设计中每次指令下发,都会创建一个新的httpclient,开销太大。实际httpclient是一个线程安全的类,全局保留一个即可。

    三、解决方案
    运用单利模式创建HttpAsyncClients,所有并发线程共用一个HttpAsyncClients对象,设置连接池最大连接数500.
    贴上初始化HttpAsyncClients代码:

    public class ServiceClient
    {
        private volatile static CloseableHttpAsyncClient httpclient;
    
        public static CloseableHttpAsyncClient getInstance() throws IOReactorException
        {
            if (httpclient == null)
                synchronized (DaServiceClient.class)
                {
                    if (null == httpclient)
                    {
                        ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
                        PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
                        cm.setMaxTotal(500);
                        httpclient = HttpAsyncClients.custom().setConnectionManager(cm).build();
                        httpclient.start();
                    }
                }
            return httpclient;
        }
    }
    

    在操作HTTP请求时,直接使用对象httpclient即可。
    经过这个优化,2000tps系统也压力很小,内存也不会一直增长。

    参考连接:https://www.cnblogs.com/davidwang456/articles/8526964.html

    相关文章

      网友评论

          本文标题:HTTPClient带来的性能问题

          本文链接:https://www.haomeiwen.com/subject/zuyvrftx.html