Я передаю некоторые файлы потоком от 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, и опция состоит в том, чтобы просто повысить его. Однако я хочу удостовериться, что я закрываю файлы, которыми я должен быть.
Эти веб-серверы? [...] я хочу закрыть эти соединения?
Это действительно связи, которые Вы установили, и необходимо правильно закрыть по крайней мере те отмеченные CLOSE_WAIT
(этому нужен один дополнительный шаг из-за Подключения HTTPS). При выполнении большого количества вещей, включающих сайты HTTPS мыться правильно должно быть достаточно для решения этой проблемы. can't identify protocol
вероятно, соединение, которое еще не было полностью настроено (см. вопрос о SF, связанный выше или это ТАК вопрос).
Действительно ли более умно сделать и снова использовать одно соединение, или разве который не выполним?
Да, и это должно быть выполнимо. Это - вопрос о программировании, все же.
Что такое точно соединение через сокет [?]
Сокет обычно определяется как an endpoint for communication
(в man 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
указывает, что 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, [...]