2013-04-30 13:42:10 |
Eohyung Lee |
description |
When a client disconnect their GET object request, proxy server knows it and after 60sec(node_timeout) proxy server close their connections.(client, object-server)
Before proxy server close object-servers connection, it get garbagging collection from object-server for preventing memory leak in object-server.
(IMHO) One disconnected connection don't make problem, but if many disconnected connections in short time make heavy load in object-server.
In swift/proxy/controllers/base.py source you can see in below function. I commented my opinion.
def close_swift_conn(self, src):
try:
src.swift_conn.close()
except Exception:
pass
src.swift_conn = None
try:
while src.read(self.app.object_chunk_size): # it cause heavy load in object-server
pass
except Exception:
pass
try:
src.close()
except Exception:
pass
You can test this like below
reproduce: (for heavy load in object server)
1) make large object(500MB) and upload it in swift
2) download this file with many concurrent connections (100~1000 connections)
3) after start downloading, wait for object-servers open their files.
4) then disconnect all connections.
5) you can see object server`s load are increased. (see it like loadavg)
And I tested without garbage collecting object-servers leak 4k in each connection. But it is not uncleared yet. I need more test. |
When a client disconnect their GET object request, proxy server knows it and after 60sec(client_timeout) proxy server close their connections.(client, object-server)
Before proxy server close object-servers connection, it get garbagging collection from object-server for preventing memory leak in object-server.
(IMHO) One disconnected connection don't make problem, but if many disconnected connections in short time make heavy load in object-server.
In swift/proxy/controllers/base.py source you can see in below function. I commented my opinion.
def close_swift_conn(self, src):
try:
src.swift_conn.close()
except Exception:
pass
src.swift_conn = None
try:
while src.read(self.app.object_chunk_size): # it cause heavy load in object-server
pass
except Exception:
pass
try:
src.close()
except Exception:
pass
You can test this like below
reproduce: (for heavy load in object server)
1) make large object(500MB) and upload it in swift
2) download this file with many concurrent connections (100~1000 connections)
3) after start downloading, wait for object-servers open their files.
4) then disconnect all connections.
5) you can see object server`s load are increased. (see it like loadavg)
And I tested without garbage collecting object-servers leak 4k in each connection. But it is not uncleared yet. I need more test. |
|