Affects Version/s: 1.0 Final
Fix Version/s: None
Operating System: Linux
Attached is a test case servlet which repeats the problem with the Jun 24, 2003
FileUploadBase.parseRequest runs out of memory when parsing a form with a large
number of inputs. The cause seems to be DeferredFileOutputStream which
allocates a ByteArrayOutputStream per input, each of which preallocates a buffer
of length inMemoryThreshold. The in memory threshold defaults to 10k, but if it
is made larger (> 1 M in our environment), then the vm quickly runs out of
memory. Most of this memory is wasted since most files are ~5k, and almost all
non-file inputs are less than 1k.
I patched DeferredFileOutputStream to use a different underlying in memory
stream. I don't really know why ByteArrayOutputStream uses a single byte,
since you can't do random access on the underlying buffer anyway.
I think the patch is something that could be incorporated into the default file
upload implementation without any noticable change in performance.