Назад | Перейти на главную страницу

Ошибка «Ресурс временно недоступен» от exim, запущенного под cygwin

Я недавно установил exim версия 4.86.1 работает как Cygwin сервис в Windows Server 2008 R2. Если я отправляю по одному электронному письму за раз, все работает нормально. Однако, если я попытаюсь отправить 10 писем, каждое сразу за другим, используя сценарий, возможно, будет работать только одно или два письма. Добавление 5-секундной паузы между электронными письмами также работает.

в exim_panic.log файл, каждый сбой происходит из-за ошибки следующего типа:

2016-06-07 04:09:00 O8DPZ0-000708-7G Cannot lock /var/spool/exim/input/0/O8DPZ0-000708-7G-D (11): Resource temporarily unavailable

Между тем /var/spool/exim/input каталог содержит группу файлов нулевого размера с именами, соответствующими названию в сообщении об ошибке выше (т. е. O8DPZ0-000708-7G-D). Эти сообщения не находятся в очереди, поскольку exim -bpc возвращает ноль, и exim не пытается повторно отправить электронные письма.

В Resource temporarily unavailable ошибка обычно означает, что вы достигли предела ресурсов системы или процесса, такого как доступная память, количество разрешенных пользовательских процессов, количество файлов, которые пользователь может открыть одновременно. Вы можете получить эту ошибку при запуске нового процесса, открытии нового файла или когда текущий процесс запрашивает у ядра дополнительную память.

Некоторые из этих ограничений являются пользовательскими, которые можно установить с помощью ulimit команда. Запуск ulimit -a команда покажет, какие ограничения для пользователей в настоящее время установлены, например,

$ ulimit -a

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 8
stack size              (kbytes, -s) 2036
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256
virtual memory          (kbytes, -v) unlimited

Судя по сообщению об ошибке, ваша проблема может быть связана с нехваткой файловых дескрипторов. Возможно, стоит проверить, какие дескрипторы файлов открыты, запустив

ls -l /proc/<PID>/fd

Cygwin специфический

Подобные проблемы также могут быть вызваны одним из Большой список хитрых приложений (список приложений, которые мешают нормальной работе Cygwin, интрузивно внедряясь в цепочку системных вызовов).

Я никогда не использовал Exim, поэтому я не знаю, порождает ли он много дочерних процессов во время работы, но сбои Fork также могут быть проблемой; они задокументированы в FAQ Cygwin: Как мне исправить fork() неудачи?. Иногда установленные библиотеки не обновляются должным образом, и их необходимо обновить с помощью Cygwin. setup.exe, или запустив rebaseall. Видеть

Наконец, я получал много Resource temporarily unavailable сообщения, когда я запускал 32-битный Cygwin. После обновления до 64-разрядной версии они в основном исчезли.