我最近安装了作为Windows Server 2008 R2中的Cygwin服务运行的exim版本4.86.1。 如果我一次发送一封邮件,它可以正常工作。 但是,如果我尝试发送10封电子邮件,每个电子邮件之后立即使用脚本,也许只有一两封电子邮件将工作。 在电子邮件之间添加5秒暂停也可以。
在exim_panic.log文件中,每个失败都是由于以下types的错误:
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的正常工作的应用程序的列表,通过在系统调用链中侵入性地注入自己)来引起的。
我从来没有使用过Exim,所以我不知道是否它在操作时会生成许多subprocess,但是Fork失败也可能是一个问题。 他们被logging在Cygwin FAQ: 我如何修复fork()失败? 。 有时安装的库没有正确更新,必须使用Cygwin setup.exe或运行rebaseall进行更新。 看到
最后,当我运行32位Cygwin时,我曾经收到很多Resource temporarily unavailable消息。 升级到64位后,这些大部分都消失了。