Google App Engine with Flask: Memorystore/redis 生成 [Errno 10



我的基于 Flask 的 GAE 应用程序已经运行了几周,没有问题。今天我注意到根 URL 在大多数情况下都会产生 500 内部服务器错误。在日志记录中,我看到这似乎与 Flask 中的会话处理(使用 Flask-Session(有关。在过渡到 GAE 之前,此应用在具有本地 Redis 实例的 VM 上运行了一年多,没有任何问题。

内存存储实例目前只有大约 1500 个密钥和 3 或 4 MB 的数据,因此负载不重。服务器本身接收的流量很少(只有我和偶尔的机器人(。我正在寻找有关是什么导致了这种行为变化的见解,或者我应该采取哪些诊断程序,因为我是 GAE 和 Google Cloud 环境的新手。

失败的典型回溯如下所示:

Traceback (most recent call last): 
File "/env/lib/python3.7/site-packages/flask/app.py", line 1969, in finalize_request response = self.process_response(response) 
File "/env/lib/python3.7/site-packages/flask/app.py", line 2268, in process_response self.session_interface.save_session(self, ctx.session, response) 
File "/env/lib/python3.7/site-packages/flask_session/sessions.py", line 166, in save_session time=total_seconds(app.permanent_session_lifetime)) 
File "/env/lib/python3.7/site-packages/redis/client.py", line 1540, in setex return self.execute_command('SETEX', name, time, value) 
File "/env/lib/python3.7/site-packages/redis/client.py", line 836, in execute_command conn = self.connection or pool.get_connection(command_name, **options) 
File "/env/lib/python3.7/site-packages/redis/connection.py", line 1065, in get_connection if connection.can_read(): 
File "/env/lib/python3.7/site-packages/redis/connection.py", line 682, in can_read return self._parser.can_read(timeout) 
File "/env/lib/python3.7/site-packages/redis/connection.py", line 295, in can_read return self._buffer and self._buffer.can_read(timeout) 
File "/env/lib/python3.7/site-packages/redis/connection.py", line 205, in can_read raise_on_timeout=False) 
File "/env/lib/python3.7/site-packages/redis/connection.py", line 173, in _read_from_socket data = recv(self._sock, socket_read_size) 
File "/env/lib/python3.7/site-packages/redis/_compat.py", line 58, in recv return sock.recv(*args, **kwargs) ConnectionResetError: [Errno 104] Connection reset by peer

同样,这是新行为。服务器完美运行了几个星期。可能发生了什么变化,我应该在哪里看?

可能的相关问题:https://github.com/andymccurdy/redis-py/issues/1186

使用health_check_interval消除了大多数,但不是全部这些"由对等方重置连接"错误(GAE Python 2.7(:

self._redis = Redis(
environ.get("REDISHOST", "localhost"),
int(environ.get("REDISPORT", 6379)),
health_check_interval=30,
)

也许小于 30 的值将消除剩余的出现次数。

最新更新