【问题标题】:Coldfusion server error - Corrupt form data: premature endingColdfusion 服务器错误 - 损坏的表单数据:提前结束
【发布时间】:2011-05-03 11:39:52
【问题描述】:

我们的实时服务器有问题。偶尔页面加载不出来,白底纯黑文字显示如下错误:

 Server Error
 The server encountered an internal error and was unable to complete your request
 Application server is busy. Either there are too many concurrent requests

如果我查看网站的错误日志,在出现错误时使用以下命令:

 grep "12:17:33" error_log

这样的行被返回:

 [Tue May 03 12:17:33 2011] [notice] jrApache[14352: 21512]  returning error page for JRun too busy or out of memory

然后,如果我在 Coldfusion cfserver.log 中搜索,我会提前几秒钟发现这些错误:

05/03 12:17:29 错误损坏的表单数据:提前结束 java.io.IOException:损坏的表单数据:提前结束 在 com.oreilly.servlet.multipart.MultipartParser.(MultipartParser.java:177) 在 com.oreilly.servlet.multipart.MultipartParser.(MultipartParser.java:99) 在coldfusion.filter.FormScope.fillMultipart(FormScope.java:190) 在coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:369) 在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33) 在coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 在coldfusion.filter.CachingFilter.invoke(CachingFilter.java:53) 在coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126) 在coldfusion.CfmServlet.service(CfmServlet.java:200) 在coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 在 jrun.servlet.FilterChain.doFilter(FilterChain.java:86) 在coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 在coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 在 jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 在 jrun.servlet.FilterChain.service(FilterChain.java:101) 在 jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) 在 jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

05/03 12:17:29 错误(JRun 服务:ProxyService [jrun.servlet.jrpp.JRunProxyService@500b675])JRunPRoxyServer.invokeRunnable: java.lang.IllegalStateException 在 jrun.servlet.JRunResponse.getWriter(JRunResponse.java:205) 在 jrun.servlet.JRunResponse.sendError(JRunResponse.java:597) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:328) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

java.lang.IllegalStateException 在 jrun.servlet.JRunResponse.getWriter(JRunResponse.java:205) 在 jrun.servlet.JRunResponse.sendError(JRunResponse.java:597) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:328) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

我真的不知道从这里做什么。

如果页面被刷新,那么它加载时不会出错。我不知道如何复制该错误,它似乎不会发生在任何特定页面或任何特定时间。

我试过设置:

 Maximum number of simultaneous Template requests: 100

在 Coldfusion 管理员中,我根据 Steven Erat 的帖子完成了这项工作:http://www.talkingtree.com/blog/index.cfm/2005/3/11/ContextSwitchingBad

但我仍然遇到错误。将其增加到更高的值会有帮助吗?

然后是较长的 Java 错误的“过早的形式结束”部分,我不确定这是否相关,也不明白它的含义。

我还查看了我的访问日志,排除了在出现任何错误时调用的任何图像或 js 文件,我有各种返回 503 http 状态的 CFM 页面,还有一些它们是 CFM 页面,以 Javascript 内容类型返回,并且在表单发布后永远不会被请求。

总之,我收到了一些非常直截了当的错误消息,目前我可以重现它们,如果我按 F5,页面加载正常,我想知道是否有人可以帮助我理解问题的根源。

最后一件事,我们正在使用 CF9 运行 RHEL 5 服务器,并且我们最近已从 CF7 升级。在升级之前没有发生此错误。

【问题讨论】:

  • 我今天安装了FusionReactor,它要求我同时安装一个新的JRE,我做到了。然后我不得不重新启动coldfusion。
  • 从那以后我就没有遇到过这个错误,但现在不知道这三件事中哪一个解决了这个问题。我想不是重启,就像我之前做过的那样,虽然它可能只是暂时释放了 RAM?有什么想法吗?

标签: coldfusion


【解决方案1】:

我很抱歉自己回答这个问题,我不完全确定是什么解决了这个问题。

但是我安装了 FusionReactor,这需要我更新我的 JVM,然后重新启动 Coldfusion。从那时起,问题就没有发生过。

我每天都收到它,至少每小时一次,但在高峰时间每分钟几次。现在已经 5 天没有发生了。

我很想听听为什么这些问题可能已经解决了?

【讨论】:

  • 这不是问题,至少你发布了解决方案!
  • 我最近卸载了FR,500错误开始出现。重新安装FR,他们又走了。我真的应该尝试找出 FR 修复它的原因。
  • 当我运行一个使用 adminapi 创建 400 个数据源的 cfloop 时,我得到了同样的错误。 FR 是否在 CF 管理页面中为您的 JVM 参数添加任何参数?
【解决方案2】:

这只是我测试 CF 9 以解决我们遇到的问题的一个猜测,但它可能只是您拥有的 RAM 量(以及它被用掉了多少)。

我发现在 CF 9 中,如果您达到内存限制,它会自动终止您的 JVM 进程并重新启动它,以便释放您的所有内存。 (我们的旧版本 CF 存在问题,如果 ram 已用尽,服务器只会瘫痪)。您是否有一个测试环境,您可以在其中对服务器施加负载,看看当您最大化 RAM 时会发生什么?

【讨论】:

  • 我有一个本地测试服务器,它运行 Ubuntu 而不是 RHEL5,它是 CF9 的开发者版本,但我会试一试
  • 不要担心它是开发版本。生产版和开发版完全一样,只是有一些连接限制。要将它变成一个刺激框,您需要做的就是输入一个有效的代码,然后哇!这是一个功能齐全的盒子!
  • 如果它是与您的生产系统不同的操作系统,这可能是个问题,您可能不会遇到同样的问题。
  • 我确实在开发过程中偶尔会在本地盒子上收到错误,但不是经常,因为它的用户较少(只有 3 个)。那么在服务器上加载负载的最佳方法是什么?我可以使用一些简单的命令行工具吗?
  • 我通常制作一个简单的页面来计算素数(但任何进程密集型页面都可以),然后使用 apaches jmeter 让它模拟许多用户的负载。 jmeter可以找到@jakarta.apache.org/jmeter
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多