tracker issue : CF-3039246

select a category, or use search below
(searches all categories and all time range)
Title:

Bug 78721:When loading files into "ram://" server eventually became unresponsive

| View in Tracker

Status/Resolution/Reason: Closed/Fixed/

Reporter/Name(from Bugbase): Dave Ferguson / dave Ferguson (dave_jf)

Created: 07/13/2009

Components: General Server

Versions: 9.0

Failure Type: Unspecified

Found In Build/Fixed In Build: 0000 / 242958

Priority/Frequency: Normal / Unknown

Locale/System: English / Win All

Vote Count: 1

Problem:

When loading files into "ram://" server eventually became unresponsive.  Server had to be restarted to regain normal operations.

Granted my intent was to cause this error condition.  However, I would have expected ColdFusion to gracefully handle the issue.

Method:

Using this code to continuously write files to ram.  My source was a 17mb pdf file.

<cfscript>
	local.file = fileRead(expandPath('.') & '\..\PDF\Docs\czech.pdf');
	for (x = 1; x < 100; x++){
	
		local.pdfName = listLast(createUUID(), '-');
		fileWrite("ram://#local.pdfName#.pdf", "#local.file#");
	}	
</cfscript>
Result:

http response header from server:
Connection: close
Date: Mon, 13 Jul 2009 19:30:32 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Type: text/html

503 Server Error


error from coldfusion-out.log
07/13 12:21:09 Error [jrpp-14] - Java heap space The specific sequence of files included or processed is: E:\Inetpub\wwwroot\Dave\blogDemos\RamOverload.cfm, line: 9
07/13 12:21:09 error ROOT CAUSE: 
java.lang.OutOfMemoryError: Java heap space
	at org.apache.commons.vfs.provider.ram.RamFileData.resize(RamFileData.java:260)
	at org.apache.commons.vfs.provider.ram.RamFileObject.resize(RamFileObject.java:258)
	at org.apache.commons.vfs.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:65)
	at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
	at coldfusion.tagext.io.FileUtils.writeFile(FileUtils.java:233)
	at coldfusion.runtime.CFPage.FileWrite(CFPage.java:2847)
	at coldfusion.runtime.CFPage.FileWrite(CFPage.java:2839)
	at cfRamOverload2ecfm910178973.runPage(E:\Inetpub\wwwroot\Dave\blogDemos\RamOverload.cfm:9)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:227)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
	at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
	at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:313)
	at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
	at coldfusion.filter.PathFilter.invoke(PathFilter.java:87)
	at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
	at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74)
	at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
	at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
	at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
	at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
	at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
	at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:53)
	at coldfusion.CfmServlet.service(CfmServlet.java:200)
	at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
	at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
	at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
	at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
	at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
	at jrun.servlet.FilterChain.service(FilterChain.java:101)
	at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
	at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
	at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)

javax.servlet.ServletException: ROOT CAUSE: 
java.lang.OutOfMemoryError: Java heap space
	at org.apache.commons.vfs.provider.ram.RamFileData.resize(RamFileData.java:260)
	at org.apache.commons.vfs.provider.ram.RamFileObject.resize(RamFileObject.java:258)
	at org.apache.commons.vfs.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:65)
	at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
	at coldfusion.tagext.io.FileUtils.writeFile(FileUtils.java:233)
	at coldfusion.runtime.CFPage.FileWrite(CFPage.java:2847)
	at coldfusion.runtime.CFPage.FileWrite(CFPage.java:2839)
	at cfRamOverload2ecfm910178973.runPage(E:\Inetpub\wwwroot\Dave\blogDemos\RamOverload.cfm:9)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:227)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
	at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
	at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:313)
	at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
	at coldfusion.filter.PathFilter.invoke(PathFilter.java:87)
	at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
	at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74)
	at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
	at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
	at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
	at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
	at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
	at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:53)
	at coldfusion.CfmServlet.service(CfmServlet.java:200)
	at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
	at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
	at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
	at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
	at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
	at jrun.servlet.FilterChain.service(FilterChain.java:101)
	at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
	at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
	at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)

	at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:70)
	at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
	at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
	at jrun.servlet.FilterChain.service(FilterChain.java:101)
	at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
	at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
	at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
	at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
	at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
	at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
	at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
	at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
	at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

07/13 12:21:09 error (JRun Service: ProxyService [jrun.servlet.jrpp.JRunProxyService@1c255df]) JRunPRoxyServer.invokeRunnable: 
java.lang.IllegalStateException
	at jrun.servlet.JRunResponse.getWriter(JRunResponse.java:205)
	at jrun.servlet.JRunResponse.sendError(JRunResponse.java:597)
	at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:328)
	at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
	at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
	at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
	at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
	at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
	at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

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

----------------------------- Additional Watson Details -----------------------------

Watson Bug ID:	3039246

External Customer Info:
External Company:  
External Customer Name: dave Ferguson
External Customer Email: 333762A94460DE1A992015D5
External Test Config: 07/13/2009

Attachments:

Comments:

+1 vote. The way this RAM:/// thing has been implemented is thoughtless and dangerous (for the reasons cited). I would have expected the developer to have to define the size of the RAM disk (say in CFAdmin or Application.cfc), and only be able to use that amount of space before getting a "disk full" error. It should not be possible to crash the JVM like this. Are there any tools for checking how much space the RAM:/// thing has got left to use? Without having to resort to Java, I mean. I agree that this is "Serious" (as flagged) at least in the context of this piece of functionality. -- Adam
Vote by External U.
23484 | November 10, 2011 06:55:27 PM GMT