通过套接字建立的连接到底是什么或者 lsof 的输出告诉我们什么?

通过套接字建立的连接到底是什么或者 lsof 的输出告诉我们什么?

我正在将一些文件从 S3 流式传输到 EC2 实例,以从标头中获取摘要数据。我使用key.close(fast=True)从中获取的所有键boto.s3.bucket.Bucket.list()(用于访问 S3 的 Python 库),但传递对键的引用,以便我可以读取其中的部分内容,这样就可以了。但是,我有时会收到 [Errno 24]:打开的文件太多。

当我跑步时,lsof | grep python我会遇到以下几种情况:

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)

其中之一:

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

这些是网络服务器吗?这些列是什么意思?我需要做更多研究来弄清楚如何在 Python 中关闭这些连接,但是我想关闭这些连接吗?建立并重复使用一个连接是否更明智,或者这不可行?当我更多地了解正在发生的事情时,我会弄清楚 Python 方面的问题,这主要是关于发生了什么的问题。

ulimit -a表示打开文件的最大数量为 1024,而一个选项就是简单地增加它。但是,我想确保我关闭了应该关闭的文件。

答案1

这些是网络服务器吗?[...] 我要关闭这些连接吗?

这些确实是你建立的连接,你应该至少正确关闭那些标记的连接CLOSE_WAIT(这需要一个额外的步骤,因为HTTPS 连接)。如果您正在做很多涉及 HTTPS 网站的事情,正确清理应该足以解决这个问题。可能是can't identify protocol尚未完全建立连接(请参阅上面链接的 SF 问题或这个问题)。

建立并重复使用一个连接是否更明智,或者这是否不可行?

是的,而且应该可行。不过,这是一个编程问题。

通过套接字建立的连接到底是什么?[?]

套接字通常定义为an endpoint for communication(在man 2 socketman 3 socket。这取决于您使用的具体协议。


这些列代表什么意思?

根据man 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.

默认的列表为lsof

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

您似乎缺少TID(或线程 ID) 列。COMMANDPID并且USER是不言自明的。FD是文件描述符的编号。399u表示 fd 编号为 339(可以在 找到/proc/10573/fd/339)并且具有读写访问权限(u)。

表示TYPE IPv4它是一个 IPv4 套接字(sock用于未知域的套接字)。

输出DEVICE对于普通文件:

DEVICE 列告诉我们正在处理哪个设备。这两个数字称为主设备号和次设备号。这个列表众所周知且有据可查。例如,主设备号 8 代表 SCSI 块设备。相比之下,IDE 磁盘的主设备号为 3。次设备号表示 15 个可用分区之一。因此 (8,1) 告诉我们正在处理 sda1。

(0,16),列出的另一个有趣的设备是指未命名的非设备挂载。

详细名单请见:

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

名单(实际上是https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt) 对于 主 编号 的 设备 没有 多大用处0

NAME对于此类套接字,其字段为:

[...]  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, [...]

相关内容