2016-01-12 1 views
3

J'ai un grand rapport. Le SQL prend seulement environ 60 secondes pour s'exécuter mais le rendu réel du PDF est ce qui prend tout le temps. Il a des centaines de pages.la demande a dépassé l'étiquette de limite de temps autorisée: cfoutput

Le paramètre global pour les délais d'attente de demande est défini sur 240 secondes.

Je remplace le paramètre Global pour ce rapport et le réglage de la valeur arbitrairement élevée (3600 secondes). De façon réaliste, ce rapport ne peut pas durer plus de 15 minutes.

Quelle que soit la durée de mon délai d'attente, cette page génèrera l'erreur de limite de temps bien avant qu'elle atteigne mon délai d'expiration.

Le SQL peut durer entre 24 secondes et 4 minutes selon le nombre de zones sélectionnées.

Même si je remplace le délai d'expiration, la page génère l'erreur environ 170 secondes (un seul point de données pour cela) après avoir terminé les requêtes. Ainsi, cela arrive parfois même une minute entière avant que le délai d'attente global ne soit atteint.

Y a-t-il une limite au temps qu'un cfdocument peut prendre pour rendre un PDF?

Existe-t-il un moyen d'augmenter ce délai?

Cela peut-il être lié à quelque chose d'autre comme la taille maximale du tampon de sortie?

ici est une fonction personnalisée que je utilise pour tester ce que le requestTimeout est:

<cffunction name="getCurrentRequestTimeout" output="false" access="private" returntype="numeric"> 
    <cfset var rcMonitor = createObject("java", "coldfusion.runtime.RequestMonitor") /> 
    <cfreturn rcMonitor.getRequestTimeout() /> 
</cffunction> 

J'ai placé que dans des taches de couple pour déterminer si le délai d'attente était correctement réglé. Dans tous les cas, il est revenu 3600 secondes.

Edit, voici un autre indice:

Cette références croisées de rapport des données de 8 autres requêtes (qui ont déjà été exécutés dans le contrôleur), il fait le référencement croix dans la vue. Il y a environ un an, nous avons considérablement accéléré cette tâche (en réduisant le temps d'exécution de 1 heure à 10 minutes) en créant des hachages pour les requêtes que nous étions en train de référencer. Une tâche a été effectuée pour supprimer complètement 4 des requêtes que nous avions hachées du rapport. Une fois que j'ai retiré ces appels de fonction BuildHashTable et supprimé toutes les références à ces requêtes, la page ne se bloque plus après 3 minutes, il faut maintenant 7,5 min pour échouer.

coldfusion.runtime.RequestTimedOutException: The request has exceeded the allowable time limit Tag: cfoutput 
at coldfusion.tagext.io.OutputTag.doStartTag(OutputTag.java:72) 
at cfdump2ecfm625244097._factor54(/WEB-INF/cftags/dump.cfm:118) 
at cfdump2ecfm625244097.runPage(/WEB-INF/cftags/dump.cfm:1) 
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246) 
at coldfusion.filter.CFVariablesScopeFilter.invoke(CFVariablesScopeFilter.java:56) 
at coldfusion.tagext.lang.ModuleTag.doStartTag(ModuleTag.java:332) 
at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2991) 
at cfonerror2ecfm289163184.runPage(D:\CF11\facilopstest\wwwroot\HFDS\events\onerror.cfm:8) 
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246) 
at coldfusion.tagext.lang.IncludeTag.handlePageInvoke(IncludeTag.java:736) 
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:572) 
at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2991) 
at cfcfml2ecfm2118004321$func$INCLUDEANDRETURNOUTPUT.runFunction(D:\CF11\facilopstest\wwwroot\HFDS\wheels\global\cfml.cfm:138) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:487) 
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) 
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:420) 
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:383) 
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:95) 
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:334) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:533) 
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2810) 
at cfonerror2ecfm1534078820$func$RUNONERROR.runFunction(D:\CF11\facilopstest\wwwroot\HFDS\wheels\events\onerror.cfm:65) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:487) 
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) 
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:420) 
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:383) 
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:95) 
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:334) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:533) 
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2810) 
at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:493) 
at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2992) 
at cfcfml2ecfm2118004321$func$SIMPLELOCK.runFunction(D:\CF11\facilopstest\wwwroot\HFDS\wheels\global\cfml.cfm:44) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:487) 
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) 
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:420) 
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:383) 
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:95) 
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:334) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:533) 
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2810) 
at cfonerror2ecfm1534078820$funcONERROR.runFunction(D:\CF11\facilopstest\wwwroot\HFDS\wheels\events\onerror.cfm:14) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:487) 
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:420) 
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:383) 
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:95) 
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:334) 
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:231) 
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:643) 
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:432) 
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:402) 
at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:108) 
at coldfusion.runtime.AppEventInvoker.onError(AppEventInvoker.java:491) 
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:532) 
at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:42) 
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 
at coldfusion.filter.PathFilter.invoke(PathFilter.java:142) 
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) 
at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:78) 
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) 
at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58) 
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 
at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) 
at coldfusion.CfmServlet.service(CfmServlet.java:219) 
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:437) 
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:197) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

Windows Server 2008 exécutant ColdFusion 11,0,07,296330 Enterprise

+1

Par quelle méthode remplacez-vous le délai d'attente global? –

+0

J'utilise setting requesttimeout = "3600"; dans le contrôleur et dans la vue. (Ceci est une application cfwheels) Ensuite, j'utilise une fonction que j'ai attachée aux superclasses du contrôleur que j'ai trouvé pour tester le délai d'expiration de la requête. (ajouté à la question) – gnarbarian

+0

Etes-vous sûr de vouloir dire le rendu, par opposition à la création du pdf? –

Répondre

0

Je l'ai résolu. le problème était un produit cartésien qui aurait pu faire exploser la mémoire. Cela a provoqué l'exécution de certaines boucles dans la sortie beaucoup plus longtemps que prévu. Je suppose que cela a gonflé la taille à un tel point que ça allait s'écraser. Toujours aucune idée pourquoi cela déclencherait un délai d'attente à l'avance, mais au moins c'est corrigé.

1

Je suggère de déplacer votre logique PDF off à un spawn cfthread. Les demandes ne sont vraiment pas adaptées pour traiter une requête de cette longueur, vous risquez donc d'obtenir un délai d'expiration du navigateur plutôt qu'un délai d'expiration ColdFusion. Mais je n'ai pas assez d'informations de votre description pour le déterminer.

+0

Pourrait-il être encore un délai d'expiration du navigateur lorsque de nombreux rapports dans d'autres zones de l'application se terminent avec succès après des périodes beaucoup plus longues, à savoir 15 min? EDIT: Toujours obtenir l'erreur après la désactivation des délais d'expiration dans Firefox. – gnarbarian

+0

alors ce n'est probablement pas un timeout de navigateur ... mais un thread est toujours une bonne idée dans tous les cas. Un utilisateur n'attendra pas 15 minutes sur son navigateur pour qu'un rapport soit terminé s'il s'agit de votre audience, vous devrez donc les avertir dès que possible. –

+0

@Chris_Tierney Je l'ai résolu. le problème était un produit cartésien qui aurait pu faire exploser la mémoire. Toujours aucune idée pourquoi cela déclencherait un délai d'attente à l'avance, mais au moins, il est résolu dans ce cas. – gnarbarian