透過套接字的連接到底是什麼?

透過套接字的連接到底是什麼?

我正在將一些文件從 S3 串流傳輸到 EC2 實例,以從標頭獲取摘要資料。我使用key.close(fast=True)從(用於存取 S3 的 python 庫)獲得的所有金鑰boto.s3.bucket.Bucket.list(),但傳遞對金鑰的引用,以便我可以讀取其中的一部分,這是可行的。但是,我有時會收到 [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。因此 (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, [...]

相關內容