我有一个4核服务器,我想在它上面运行redis。为了充分利用4核的功能,预计将启动4个redis实例,因为redis设计为单线程。
但是,我很好奇如何确保4个实例在4个不同的内核上运行?实例如何确定启动它时运行的核心?
答案 0 :(得分:14)
Redis本身并不提供这样的保证。
如果启动4个实例,则将有4个不同的进程,操作系统必须在4个核心上进行调度。操作系统可以执行此负载平衡,从而优化系统性能。
现在,如果您真的想将每个实例绑定到特定的核心,现代操作系统通常会提供工具来强制执行特定CPU核心上的进程。
例如,在Linux上,您可以查看taskset和numactl命令。
实际上,您需要注意这一点,因为一旦在特定核心上启动Redis(设置CPU掩码),所有线程和子进程都将继承此CPU掩码。因此,当Redis尝试触发后台保存操作或后台AOF重写时,它将严重影响Redis实例的性能。这是因为Redis主线程将通过后台操作(通常是CPU消耗)共享CPU核心。
如果你真的想玩CPU绑定(但这真的是个好主意吗?),你需要将N Redis实例绑定到N + 1个CPU核心,保留一个核心可用于后台操作,并确保在对于这些实例,大多数后台操作可以同时运行。