Я пишу сервер веб-сокета в python. Я пробовал подход ниже с txws, autobahn и торнадо, все с аналогичными результатами.Python безопасное потребление памяти в сети
У меня, кажется, огромное потребление памяти с защищенными веб-сайтами, и я не могу понять, где и почему это может произойти. Ниже приведен пример торнадо, но я могу привести примеры в autobahn или txws.
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import json
class AuthHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'new connection for auth'
def on_message(self, message):
message = json.loads(message)
client_id = message['client_id']
if client_id not in app.clients:
app.clients[client_id] = self
self.write_message('Agent Recorded')
def on_close(self):
print 'auth connection closed'
class MsgHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'new connection for msg'
def on_message(self, message):
message = json.loads(message)
to_client = message['client_id']
if to_client in app.clients:
app.clients[to_client].write_message('You got a message')
def on_close(self):
print 'msg connection closed'
app = tornado.web.Application([
(r'/auth', AuthHandler),
(r'/msg', MsgHandler)
])
app.clients = {}
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(app, ssl_options={
'certfile': 'tests/keys/server.crt',
'keyfile': 'tests/keys/server.key'
})
http_server.listen(8000)
tornado.ioloop.IOLoop.instance().start()
После того, около 10 000 подключений я нахожу, что я использую около 700Мб памяти с SSL по сравнению с 43MB без, и я никогда не получить его обратно, если я не убить процесс. Похоже, что проблема тесно связана с количеством выполненных соединений, а не с сообщениями.
Потребление, по-видимому, происходит независимо от клиента (я написал своего клиента и попробовал другие клиенты).
Являются ли безопасные веб-порты действительно намного более интенсивными в памяти, чем обычные сетевые элементы? Или мой код сервера не реализует его правильно?
OpenSSL по умолчанию выделяет много памяти для каждого подключения. Некоторые замечательные подробности в этом блоге - https://journal.paul.querna.org/articles/2011/04/05/openssl-memory-use/ –
Удивительный! В этой статье было задано так много вопросов, и содержащиеся в ней решения действительно снизили потребление памяти. – sambev