O que exatamente é uma conexão via soquete ou o que a saída do lsof nos diz?

O que exatamente é uma conexão via soquete ou o que a saída do lsof nos diz?

Estou transmitindo alguns arquivos do S3 para uma instância do EC2 para obter dados resumidos dos cabeçalhos. Eu uso key.close(fast=True)para todas as chaves que recebo boto.s3.bucket.Bucket.list()(biblioteca python para acessar o S3), mas passo uma referência às chaves para que eu possa ler partes delas, e isso funciona. No entanto, às vezes recebo [Errno 24]: Muitos arquivos abertos.

Quando corro, lsof | grep pythonrecebo uma variedade destes:

python    10573 ec2-user  399u     IPv4  59221       0t0    TCP ip-10-0-0-113.ec2.internal:59293->s3-1-w.amazonaws.com:https (CLOSE_WAIT)
python    10573 ec2-user   72u     IPv4  60910       0t0    TCP ip-10-0-0-113.ec2.internal:37952->s3-1-w.amazonaws.com:https (ESTABLISHED)

e um destes:

python    10573 ec2-user   91u     sock    0,6       0t0  61105 can't identify protocol

Esses são servidores da web? O que significam as colunas? Precisarei pesquisar mais para descobrir como fechar essas conexões em python, mas quero fechar essas conexões? É mais inteligente fazer e reutilizar uma conexão ou isso não é viável? Vou descobrir o lado do python quando entender mais o que está acontecendo, isso é principalmente uma questão sobre o que está acontecendo.

ulimit -adiz que o máximo de arquivos abertos é 1024 e uma opção é simplesmente aumentá-lo. No entanto, quero ter certeza de que estou fechando os arquivos que deveria.

Responder1

Esses são servidores da web? [...] quero fechar essas conexões?

Estas são de fato conexões que você fez, e você deve fechar adequadamente pelo menos aquelas marcadas CLOSE_WAIT(isso precisa de uma etapa extra, por causa dea conexão HTTPS). Se você estiver fazendo muitas coisas envolvendo sites HTTPS, uma limpeza adequada deve ser suficiente para resolver esse problema. Provavelmente é can't identify protocoluma conexão que ainda não foi totalmente configurada (veja a pergunta SF no link acima ouesta pergunta SO).

É mais inteligente fazer e reutilizar uma conexão ou isso não é viável?

Sim, e deve ser viável. Essa é uma questão de programação, no entanto.

O que exatamente é uma conexão através de socket[?]

Um soquete é normalmente definido como an endpoint for communication(emman 2 socketeman 3 socket. Depende de qual protocolo específico você está usando.


O que significam as colunas?

De acordo comman lsof:

 An  open file may be a regular file, a directory, a block special file,
 a character special file, an executing text  reference,  a  library,  a
 stream  or  a  network  file  (Internet socket, NFS file or UNIX domain
 socket.)  A specific file or all the files in  a  file  system  may  be
 selected by path.

A lista padrão de colunas lsofé:

$ lsof | head -1
COMMAND     PID   TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

Parece que está faltando a TIDcoluna (ou ID do thread). COMMANDe PIDsão USERautoexplicativos. FDé o número do descritor de arquivo. 399uindica que o fd é numerado 339 (pode ser encontrado em /proc/10573/fd/339) e tem acesso de leitura e gravação ( u).

Indica TYPE IPv4que é um soquete IPv4 ( sockpara um soquete de domínio desconhecido).

A DEVICEsaídapara arquivos normais:

A coluna DEVICE nos informa em qual dispositivo estamos trabalhando. Os dois números são chamados de números maiores e menores. A lista é bem conhecida e documentada. Por exemplo, o número principal 8 significa dispositivo de bloco SCSI. Para efeito de comparação, os discos IDE têm um número maior 3. O número menor indica uma das 15 partições disponíveis. Assim (8,1) nos diz que estamos trabalhando em sda1.

(0,16), o outro dispositivo interessante listado refere-se a montagens sem nome e sem dispositivo.

Para lista detalhada, consulte:

http://www.kernel.org/pub/linux/docs/device-list/devices.txt

E a lista (na verdade emhttps://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt) não é muito útil para dispositivos com maior número 0.

O NAMEcampo, para tais soquetes, é:

[...]  the  local  and  remote  Internet addresses of a network
file; the local host name or IP  number  is  followed  by  a
colon  (':'),  the  port,  ``->'',  and  the two-part remote
address; IP addresses may be reported as numbers  or  names, [...]

informação relacionada