predixy
predixy copied to clipboard
predixy的CPU占用问题
我使用的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
}
}
所以我的问题是:
- predixy这样的CPU占用是合理的吗?有无优化的空间?
WorkerThreads参数能自动根据分配给它的CPU核数调节吗?
@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、现在可以通过命令行参数传递来实现
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参数的功能后面我试一下,应该能解决我遇到的问题。