MagicStack / MagicStack/uvloop

TLS/SSL asyncio/uvloop leaks memory

Đang mở
#565 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Cython
Star
11.9k
Fork
616
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với trình tái hiện tối thiểu của asyncio.Protocol bằng cách sử dụng uvloop.new_event_loop, loop.create_server và ngữ cảnh TLS, sau đó chạy lệnh ab -n15000 -c15000 -r được cung cấp trên Linux với các phiên bản Python đã nêu. So sánh hành vi bộ nhớ khi có và không có TLS, cũng như khi có và không có uvloop; hoàn tất khi đã cô lập được rò rỉ và bộ nhớ không còn tăng quá mức dưới tải được tái hiện.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
networking
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.