TLS/SSL asyncio/uvloop leaks memory
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- networking
Línea de trabajo
Comienza con el reproductor mínimo de asyncio.Protocol usando uvloop.new_event_loop, loop.create_server y el contexto TLS, y luego ejecuta en Linux el comando proporcionado ab -n15000 -c15000 -r con las versiones de Python indicadas. Compara el comportamiento de la memoria con y sin TLS y con y sin uvloop; se considera terminado cuando la fuga esté aislada y la memoria deje de crecer excesivamente bajo la carga reproducida.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
python3.9 or uvloop seems to leak smaller, but python3.11 (and others?) leaks A LOT OF memory under load
test command: ab -n15000 -c15000 -r https://127.0.0.1/
(apt install apache2-utils)
import asyncio, ssl, uvloop
class HTTP(asyncio.Protocol):
def __init__(self):
self.transport = None
def connection_made(self, transport) -> None:
self.transport = transport
def data_received(self, data) -> None:
self.transport.write(
b'HTTP/1.1 200 OK\r\nContent-Length: 0\r\nConnection: keep-alive\r\n\r\n'
)
self.transport.close()
def connection_lost(self, _=0) -> bool | None:
self.transport.close()
def make_tls_context():
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('cert.crt', 'cert.key')
return ctx
tls_context = make_tls_context()
loop = uvloop.new_event_loop()
loop.set_debug(True)
async def start_server(loop):
return await loop.create_server(
HTTP, '127.0.0.1', 443, backlog=65535,
ssl=tls_context)
loop.run_until_complete(start_server(loop))
loop.run_forever()
loop.close()
CPython versions tested on:
3.9, 3.11
Operating systems tested on:
Linux
- Lenguaje dominante
- Cython
- Estrellas
- 11.9k
- Forks
- 615
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MagicStack/uvloop
-
License not clear Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#759 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#741 · 2 reacciones ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#702 · 8 comentarios · 9 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
MagicStack/uvloop#766 ·
-
Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
MagicStack/uvloop#765 ·
Todos los issues de MagicStack/uvloop
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
home-assistant/supervisor#7248 ·
-
bug cert blocker needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
project-chip/connectedhomeip#74373 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
sonic-net/sonic-mgmt#28113 ·
-
kind/bug kind/community-report needs/triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100