首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在负载测试期间,Apache服务器会意外地耗尽连接。

在负载测试期间,Apache服务器会意外地耗尽连接。
EN

Stack Overflow用户
提问于 2019-11-19 23:47:18
回答 1查看 775关注 0票数 0

下午好,

我们正在尝试将应用程序从Redis迁移到Geode集群,以获得更好的可伸缩性和多广域网同步。目前,我们只测试一个集群。设立的是:

  • 8硬件服务器(64核CPU、256 16内存、Debian v9拉伸)
  • 16 Geode服务器,每个硬件主机2台(v1.10.0)。我们用JDK8和CMSGC进行了测试,但是决定升级到OpenJDK13和ShenandoahGC以实现低暂停,因为它应该是一个超级快缓存

服务器设置:

代码语言:javascript
复制
--max-connections=1200 --J=-Xmx12G --J=-Xms12G --J=-XX:+UnlockExperimentalVMOptions
--J=-XX:+UseShenandoahGC --J=-XX:+DisableExplicitGC --J=-XX:+AlwaysPreTouch
--J=-Xlog:gc*:file=gc-%p-%t.log:uptime,time:filecount=3,filesize=10m --J=-Dgemfire.conserve-sockets=false

  • 4定位器
  • 5区域:具有冗余副本的
    • 4 PARTITION_REDUNDANT (从1小时到7天的不同入口时间到活的到期时间-s,以及进入时到活的到期-操作)
    • 1与进入时到到期的7
    • 复制。

在负载测试期间,我们间歇性地(每小时一次)在服务器日志中遇到这个错误:

代码语言:javascript
复制
[info 2019/11/18 16:46:03.561 PST <Pooled Waiting Message Processor 20> tid=0x925b] ...
[warn 2019/11/18 17:30:46.363 PST <Handshaker /XX.XXX.XXX.XXX:10001 Thread 152> tid=0xaed1] Rejected connection from /XX.XXX.XXX.XXX because current connection count of 1200 is greater than or equal to the configured max of 1200
[warn 2019/11/18 17:30:46.363 PST <Handshaker /XX.XXX.XXX.XXX:10001 Thread 155> tid=0xb503] Rejected connection from /XX.XXX.XXX.XXX because current connection count of 1200 is greater than or equal to the configured max of 1200
...[hundreds of these messages]

关于客户:

代码语言:javascript
复制
org.apache.geode.cache.client.ServerRefusedConnectionException: servername(servername:28165)<v145>:41001 refused connection: exceeded max-connections 1200
    at org.apache.geode.internal.cache.tier.sockets.Handshake.readMessage(Handshake.java:331)
    at org.apache.geode.cache.client.internal.ClientSideHandshakeImpl.handshakeWithServer(ClientSideHandshakeImpl.java:232)
    at org.apache.geode.cache.client.internal.ConnectionImpl.connect(ConnectionImpl.java:102)
    at org.apache.geode.cache.client.internal.ConnectionConnector.connectClientToServer(ConnectionConnector.java:71)
    at org.apache.geode.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:111)
    at org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.createPooledConnection(ConnectionManagerImpl.java:202)
    at org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.forceCreateConnection(ConnectionManagerImpl.java:212)
    at org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:319)
    at org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:70)

客户代码:

代码语言:javascript
复制
        ClientCacheFactory cacheFactory = new ClientCacheFactory()
                .set("log-level", "ERROR");
        for (String locator : locators) {
            HostPort hostPort = new HostPort(locator);
            cacheFactory.addPoolLocator(hostPort.getHost(), hostPort.getPort());
        }
        this.cache = cacheFactory.create();

然后

代码语言:javascript
复制
    private <K,V> Region<K, V> getOrCreateRegion(String name, ClientRegionFactory<K, V> regionFactory) {
        Region<K, V> region = cache.getRegion(name);
        if (region == null) {
            region = regionFactory.create(name);
        }
        return region;
    }

若要获取区域,未设置自定义选项。

每个服务器上的正常客户端连接量约为250,但在负载测试期间的某个随机时间(60k读取RPS / 60k写RPS),连接量跃升到最大值(1200),客户端无法打开连接。分区区域具有“分布式-ack”的范围,这会导致错误和数据损坏的激增。服务器自愈立即或两个和连接数下降到正常,但到那时,测试失败。我试着提高日志级别,但是"INFO“只是什么都没有显示(选中的受影响的服务器和定位日志),”调试“生成了大量的数据,以至于服务器无法跟上大量的日志消息。120 k的read+write RPS对我们来说是正常的生产流量,用10k的总体RPS进行测试并没有引起异常。这些锁不与垃圾收集连接,因为gc日志显示在此期间没有运行gc。

您知道如何调优Geode集群以避免这些异常和数据损坏吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 01:01:56

此“拒绝连接:超出最大连接”错误的发生,是因为客户端试图创建更多的连接到服务器,而不是您设置的最大连接。

客户端使用连接池,因此来自单个客户端的并发连接的数量与当前从客户端执行操作的线程数量成正比。

下一步是确定您的负载生成实际创建了多少线程。理论上,每个线程一次只使用一个连接,因此,如果负载非常不均匀,并且所有客户端同时针对同一台服务器,则最大连接的最坏情况应该是在num_threads * num_clients附近。

如果无法控制客户端上的线程数,池本身就有调优参数(如PoolFactory.setMaxConnections ),这将限制来自单个客户端的连接数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58944578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档