ColdFusion fila de correio pára o processamento
-
01-07-2019 - |
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.
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>