HTTPClient带来的性能问题

一、问题描述
最近在给项目做性能测试,高并发情况下,发现系统内存暴涨,而且吞吐量很低,基本只有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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,000评论 8 265
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,495评论 11 349
  • 几十年,瞬间。今天回到童年。心还是那个心,却不是往昔容颜。对于一切,我似乎都很怀念,但不是所有人都如你柔软,便...
    龙青阅读 2,563评论 0 1
  • 今天终于看完了传媒经济学。其实我早前几天就想吐槽️本书了,但是每天都有其他事要记录所以就拖到了看完,一起吐槽。 我...
    吉野佳阅读 1,405评论 0 1

友情链接更多精彩内容