Разделенная на блоки обработка закодировала HTTP запросы POST в Python (или универсальный CGI под апачем)

Есть ли проблема? Когда MySQL работает, ему обычно выделяется весь buffer_pool.

5.7 buffer_pool
x.x various other tables and caches
y.y code (OS, MySQL, etc)
0.6 "freeable" memory
---
7.5 Total

600 МБ находится под управлением ОС, а не MySQL. Вероятно, это будут дисковые блоки, которые кэшируются в оперативной памяти. Если они соответствуют тому, что находится на диске (то есть не "грязно"), то они сразу же могут быть использованы повторно.

3.7 ГБ, которые вы показываете в этой таблице , могут быть свободными блоками под контролем InnoDB. Если это так, они будут использованы повторно, когда вы сделаете INSERTs и т. Д.

(Предостережение: большая часть этого ответа - «угадывание», основываясь на моем опыте.)

5
задан Otm Shank 12 November 2008 в 17:50
поделиться

5 ответов

Возможно, это - проблема конфигурации? На Django могут выходить с Apache mod_python, WSGI и FastCGI, и он может принять загрузки файла.

1
ответ дан 18 December 2019 в 14:53
поделиться

Я сказал бы, используют скрученную платформу для создания Вашего http слушателя. Скрученные поддержки разделили кодирование на блоки.

http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html

Надеюсь, это поможет.

2
ответ дан 18 December 2019 в 14:53
поделиться

Apache 2.2 mod_cgi хорошо работает для меня, Apache прозрачно не разделяет запрос на блоки, когда он передается приложению CGI.

WSGI в настоящее время запрещает разделенные на блоки запросы, и mod_wsgi действительно блокирует их с 411 ответами. Это находится на чертежной доске для WSGI 2.0. Но поздравления по случаю нахождения чего-то, что разделяет запросы на блоки, я никогда не видел то прежде!

2
ответ дан 18 December 2019 в 14:53
поделиться

I had the exact same problem a year ago with a J2ME client talking to a Python/Ruby backend. The only solution I found which doesn't require application or infrastructure level changes was to use a relatively unknown feature of mod_proxy.

Mod_proxy has the ability to buffer incoming (chunked) requests, and then rewrite them as a single request with a Content-Length header before passing them on to a proxy backend. The neat trick is that you can create a tiny proxy configuration which passes the request back to the same Apache server. i.e. Take an incoming chunked request on port 80, "dechunk" it, and then pass it on to your non-HTTP 1.1 compliant server on port 81.

I used this configuration in production for a little over a year with no problems. It looks a little something like this:

ProxyRequests Off

<Proxy http://example.com:81>
  Order deny,allow
  Allow from all
</Proxy>

<VirtualHost *:80>
  SetEnv proxy-sendcl 1
  ProxyPass / http://example.com:81/
  ProxyPassReverse / http://example.com:81/
  ProxyPreserveHost On
  ProxyVia Full

  <Directory proxy:*>
    Order deny,allow
    Allow from all
  </Directory>

</VirtualHost>

Listen 81

<VirtualHost *:81>
  ServerName example.com
  # Your Python application configuration goes here
</VirtualHost>

I've also got a full writeup of the problem and my solution detailed on my blog.

6
ответ дан 18 December 2019 в 14:53
поделиться

Вы не можете делать то, что хотите, с помощью mod_python. Вы можете сделать это с помощью mod_wsgi, если используете версию 3.0. Однако вам необходимо выйти за рамки спецификации WSGI 1.0, поскольку WSGI эффективно запрещает содержимое запросов с фрагментами.

Найдите WSGIChunkedRequest в http://code.google.com/p/modwsgi/wiki/ChangesInVersion0300 для того, что требуется.

2
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: