Pergunta

servidor Nossa CF pára ocasionalmente correio processamento. Isso é problemático, pois muitos de nossos clientes dependem disso.

Nós encontramos sugestões on-line que mencionam arquivos de zero bytes na pasta não entregue, então eu criei uma tarefa que remove-los a cada três minutos. No entanto, a paralisação ocorreu novamente.

Eu estou procurando sugestões para diagnosticar e corrigir o problema.

  • CF 8 padrão
  • Win2k3

Adicionado:

  • Não há erros no log de e-mail no momento da fila falha
  • Não tentou correr isso sem usar a fila, devido à grande quantidade de mensagens que enviamos

Adicionado 2:

  • Não parece ser um problema com qualquer um dos arquivos na pasta de spool. Quando reiniciar a fila de correio, todos eles parecem processar corretamente.

Adicionado 3:

  • Não estamos usando anexos.
Foi útil?

Solução

O que acabamos fazendo:

Eu escrevi duas tarefas agendadas. O primeiro verificado para ver se havia alguma mensagem na fila de pasta mais velho do que n minues (definido como 30). A segunda repor a fila todas as noites durante a baixa utilização.

Infelizmente, nós nunca realmente descobriu por que a fila viria fora dos trilhos, mas só parece acontecer quando usar o Exchange -. Outros servidores de correio, tentámos não tem esse problema

Editar: me pediram para postar meu código, então aqui está um para reiniciar quando o correio de idade é encontrada:

<cfdirectory action="list" directory="c:\coldfusion8\mail\spool\" name="spool" sort="datelastmodified">
<cfset restart = 0>
<cfif datediff('n', spool.datelastmodified, now()) gt 30>
    <cfset restart = 1>
</cfif>
<cfif restart>
    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")>
    <cfset MailSpoolService = sFactory.mailSpoolService>
    <cfset MailSpoolService.stop()>
    <cfset MailSpoolService.start()>
</cfif>

Outras dicas

Não tentou correr isso sem usar a fila, devido à grande quantidade de mensagens que enviamos

De qualquer maneira, você tentou desligar o spool? Eu vi-mail são enviados a uma taxa de 500-600 mensagens em meio segundo, e isso é no tipo de servidor de baixa qualidade. Com o tempo limite de página padrão em 60 segundos, que seria ~ 72.000 e-mails você pode enviar antes da página iria expirar. Você está enviando mais de 72.000 de cada vez?

Uma I alternativa utilizada antes CFMAIL foi tão rápido foi para construir um spooler personalizado. Em vez de enviar os e-mails em tempo real, salvá-los em uma tabela de banco de dados. Em seguida, configurar uma tarefa programada para enviar algumas centenas das mensagens e reprogramar-se por alguns minutos mais tarde, até que a tabela está vazia.

Nós agendado o trabalho para executar uma vez por dia; e pode re-programar-se a correr novamente em um par de minutos, se a tabela não está vazia. Nunca tive um problema com ele.

Você já tentou apenas ignorando a fila por completo? (Em CF Admin, em configurações de spool de correspondência, desmarque "mensagens de correio spool para a entrega.")

Eu tenho o mesmo problema, por vezes, e não é devido a um arquivo de zero byte embora esse problema fez surgir no passado. Parece que um ou dois arquivos (as mais antigas da pasta) irá manter a fila de processamento. O que faço é mover todas as mensagens para uma pasta exploração, reiniciar a fila mail e copiar as mensagens de volta em um pedaço de cada vez em ordem cronológica inversa, esperar por eles para sair e passar um pouco mais longo. As mensagens que estavam segurando a fila são colocados em uma pasta separada para ser examinado último.

Você pode provavelmente programaticamente fazer isso por parar a fila , movendo o arquivo mais antigo para outro pasta, então iniciar a fila de correio e ver se o envio começa com sucesso, verificando a contagem de arquivo pasta e datas . Se a remoção do arquivo mais antigo não funcionar, repita o processo anterior até que todos os arquivos de correio ofensivos são movidos e enviando continua com sucesso.

Espero que o ajuda.

Nós temos realmente uma configuração idêntica, 32bit CF8 em Win2K3.

Nós empregamos solução de Ben cerca de um ano atrás, e que certa ajudou auto re-fila e-mails que ficar preso.

No entanto, recentemente sem uma razão particular de nossos servidores web 7 decidiu entrar neste estado com todas as tentativas de e-mail.

Uma exceção ocorreu quando a criação de parâmetros do servidor de correio. Esta excepção foi causado por: coldfusion.mail.MailSessionException: Uma exceção ocorreu durante a configuração do servidor de correio parâmetros ..

Cada um dos nossos servidores web são clones idênticos uns dos outros, então por que ele só estava a acontecer que um é bizarro.

Outro item a nota é que tivemos um script que reiniciar a máquina no meio da noite devido a problemas de gerenciamento de memória do JRun. O ato de reinicialização parecia iniciar o problema. Um reinício posterior do serviço CF, então limpá-la, e a máquina estaria bem até que ele reiniciado novamente.

Nós descobrimos que o problema está relacionado com o antivírus McAfee, depois de atualizá-lo para excluir o diretório C: \ ColdFusion8, o problema foi embora

.

Espero que ajude.

Não é / foi um problema com o spooler de correio e mensagens com anexos em CFMX 8 que foi corrigido com uma das correcções. Versão 8.0.1, pelo menos, deveria ter tido que fixa.

Há um erro no código de Ben Perdição. Obrigado de qualquer maneira ben, o código é grande, e nós usá-lo agora em um de nossos servidores com CF8 instalado, mas: se o diretório (\ spool) está vazia, o código de falha (erro: Valor Data passou a função de data DateDiff não é especificado ou inválido.) Isso porque se o objeto de consulta carretel está vazio (EQ spool.recordcount 0), a função datediff produz uma erro.

nós usamos isto agora:

<!--- check if request for this page is local to prevent "webusers" to request this page over and over, only localhost (server) can get it e.g. by cf scheduled tasks--->
<cfsetting requesttimeout="30000">
<cfset who = CGI.SERVER_NAME>
<cfif find("localhost",who) LT 1>
    security restriction, access denied.
    <cfabort>
</cfif> 

<!--- get spool directory info --->
<cfdirectory action="list" directory="C:\JRun4\servers\cfusion\cfusion-ear\cfusion-war\WEB-INF\cfusion\Mail\Spool\" name="spool" sort="datelastmodified">
<cfset restart = 0>
<cfif spool.recordcount GT 0><!--- content there? --->
    <cfif datediff('n', spool.datelastmodified, now()) gt 120>
        <cfset restart = 1>
    </cfif>
</cfif>
<cfif restart><!--- restart --->
    <cfsavecontent variable="liste">
        <cfdump var="#list#">
    </cfsavecontent>    
    <!--- info --->
    <cfmail to="x@y.com" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    1/2 action: ...try to restart. Send another mail if succeeded!
    #now()#

    Mails:
    #liste#
    </cfmail>

    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")>
    <cfset MailSpoolService = sFactory.mailSpoolService>
    <cfset MailSpoolService.stop()>
    <cfset MailSpoolService.start()>

    <!--- info --->
    <cfmail to="x@y.com" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    2/2 action: ...succeeded!
    #now()#
    </cfmail>

</cfif>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top