Что именно представляет собой соединение через сокет или что нам говорит вывод lsof?

Что именно представляет собой соединение через сокет или что нам говорит вывод lsof?

Я передаю потоком некоторые файлы из S3 в экземпляр EC2, чтобы получить сводные данные из заголовков. Я использую key.close(fast=True)для всех ключей, которые я получаю из boto.s3.bucket.Bucket.list()(библиотека Python для доступа к S3), но передаю ссылку на ключи, чтобы я мог читать их части, и это работает. Однако иногда я получаю [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 communicationman 2 socketиman 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столбец (или идентификатор потока). COMMAND, PIDи USERэто говорит само за себя. FD— это номер дескриптора файла. 399uуказывает, что файловый дескриптор имеет номер 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, [...]

Связанный контент