高负载环境下Redis连接错误

问题描述 投票:0回答:1

我正在一个非常重负载的环境中工作,

我有一个Python代码,它在大约有100个CPU的服务器上启动一个包含300个进程的进程池,并不断运行进程来检查Redis的值,如果该值不存在,它会保存它,如果存在,它会保存它。运行一些繁重的计算。它使用 Redis

get set
命令来执行此操作。

每个进程都有一个 Redis 客户端,仅初始化一次,然后通过程序使用

伪代码

import redis
from concurrent.futures import ProcessPoolExecutor

redis: redis.Redis

def init_process():

    global redis
    redis = redis.Redis(host="127.0.0.1", port=6379, decode_response=True)

def recieved_request(unique_id):
    x = redis.getset(unique_id, "hello world")
    if x is not None:
        heavy_cpu_load()
        redis.delete(unique_id)
    else:
        redis.expire(unique_id, 60)

pool = ProcessPoolExecutor(max_workers=300, initializer=init_process)



def on_new_request():
    pool.submit(recieved_request)

    

当以低流量运行代码时,它会按预期工作,但是当以高流量运行时,我会收到以下错误:

error 99 - connecting to cannot assign requested address

error while reading from 127.0.0.1:6379: (104, connection is reset by peer)

connection is closed by server

我尝试过修改超时以快速关闭空闲连接,并将

maxconnection
的数量更改为 50000,两者都不会导致行为发生变化。

  • 在没有大量 CPU 计算的情况下运行相同的代码时,我没有得到任何错误
  • 我无法在不同的机器上运行 Redis。
  • 我在centos7.8和python3.8.10上使用最新的Redis(7.0.11)
python redis centos centos7 python-3.8
1个回答
0
投票

我也面临着类似的情况;请告诉我如何解决

© www.soinside.com 2019 - 2024. All rights reserved.