predixy icon indicating copy to clipboard operation
predixy copied to clipboard

predixy的CPU占用问题

Open jeremyxu2010 opened this issue 6 years ago • 2 comments

我使用的predixy版本是1.0.5,后端接redis cluster集群,服务器cpu型号为model name : Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz, 使用多个redis-benchmark进程压测predixy,但我发现predixy的CPU占用很高,数据如下:

1. redis cluster为3分片,要将后端3个redis-server进程压满,`predixy`占用1200%的CPU
2. redis cluster为4分片,要将后端4个redis-server进程压满,`predixy`占用1600%的CPU
3. redis cluster为5分片,要将后端5个redis-server进程压满,`predixy`占用2000%的CPU

所以平均压满一个redis-server(即使之100%的CPU占用),predixy得给它多分4个cpu core,另外还需要手动修改WorkerThreads参数为cpu的核数。

我的配置如下: predixy.conf

    Name PredixyProxy
    Bind 0.0.0.0:6379
    WorkerThreads 12
    ClientTimeout 300
    LogVerbSample 0
    LogDebugSample 0
    LogInfoSample 0
    LogNoticeSample 0
    LogWarnSample 1
    LogErrorSample 1
    Include auth.conf
    Include cluster.conf

auth.conf

    Authority {
      Auth "123456" {
        Mode write
      }
      Auth "#a complex password#" {
        Mode admin
      }
    }

cluster.conf

    ClusterServerPool {
        Password 123456
        MasterReadPriority 40
        StaticSlaveReadPriority 50
        DynamicSlaveReadPriority 60
        RefreshInterval 3
        ServerTimeout 1
        ServerFailureLimit 10
        ServerRetryTimeout 1
        KeepAlive 0
        Servers {
            + redis-redis-cluster:6379
        }
    }

所以我的问题是:

  1. predixy这样的CPU占用是合理的吗?有无优化的空间?
  2. WorkerThreads参数能自动根据分配给它的CPU核数调节吗?

@fortrue

jeremyxu2010 avatar Jun 20 '19 02:06 jeremyxu2010

1、如果你能找/写出一个性能比predixy更好的redis代理,告诉我,我去学习改进。在高并发情况下通过predixy来把后面redis cpu打满跟你直接连接redis打满,redis所能提供的吞吐量前者远远高于后者,看wiki https://github.com/joyieldInc/predixy/wiki/%E4%B8%8E%E7%9B%B4%E8%BF%9Eredis%E5%AF%B9%E6%AF%94benchmark 2、现在可以通过命令行参数传递来实现

fortrue avatar Jun 21 '19 02:06 fortrue

1、如果你能找/写出一个性能比predixy更好的redis代理,告诉我,我去学习改进。在高并发情况下通过predixy来把后面redis cpu打满跟你直接连接redis打满,redis所能提供的吞吐量前者远远高于后者,看wiki https://github.com/joyieldInc/predixy/wiki/%E4%B8%8E%E7%9B%B4%E8%BF%9Eredis%E5%AF%B9%E6%AF%94benchmark 2、现在可以通过命令行参数传递来实现

@fortrue 唐突了

1、 目前predixy确实是我在世面上能找到的性能最优异的redis代理,给你点个赞!!! 我这里会给我的使用方说明一下,给他们两个选择: 1)使用predixy代理透明地访问后端redis集群,这个方案客户端很干净,但要承担predixy的资源消耗
2)客户端直接访问后端redis集群,客户端需要配置redis集群bootstrap地址列表,同时自行处理move等redis集群特有的指令,这个方案客户端要处理的工作较多,但不需要承担predixy的资源消耗

2个选择各有利弊,看使用方的场景了。

2、命令行参数传递WorkerThreads参数的功能后面我试一下,应该能解决我遇到的问题。

jeremyxu2010 avatar Jun 21 '19 03:06 jeremyxu2010