[RESOLVIDO] Problemas com Heap Size para gerar SHA512 com arquivos grandes

Olá Pessoal,

Estou com o seguinte problema: existe uma rotina de uploads de arquivo que dispara algumas exceptions quando trabalha com arquivos maiores que 8M.


java.lang.Exception
	at br.unesp.ourinhos.dao.DAO.disconnect(DAO.java:42)
	at br.unesp.ourinhos.business.MaterialBusiness.persist(MaterialBusiness.java:149)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:307)
	at org.mentawai.filter.FileUploadFilter.filter(FileUploadFilter.java:201)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
	at org.mentawai.core.Controller.invokeAction(Controller.java:849)
	at org.mentawai.core.Controller.service(Controller.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
	at java.lang.Thread.run(Thread.java:662)
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:307)
	at org.mentawai.filter.FileUploadFilter.filter(FileUploadFilter.java:201)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
	at org.mentawai.core.Controller.invokeAction(Controller.java:849)
	at org.mentawai.core.Controller.service(Controller.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2786)
	at java.lang.StringCoding.safeTrim(StringCoding.java:64)
	at java.lang.StringCoding.access$300(StringCoding.java:34)
	at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:251)
	at java.lang.StringCoding.encode(StringCoding.java:272)
	at java.lang.StringCoding.encode(StringCoding.java:284)
	at java.lang.String.getBytes(String.java:986)
	at br.unesp.ourinhos.utility.Hash.generateHash(Hash.java:43)
	at br.unesp.ourinhos.business.MaterialBusiness.persist(MaterialBusiness.java:71)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:307)
	at org.mentawai.filter.FileUploadFilter.filter(FileUploadFilter.java:201)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
	at org.mentawai.core.Controller.invokeAction(Controller.java:849)
	at org.mentawai.core.Controller.service(Controller.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
Jul 29, 2011 10:28:30 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Controller threw exception
java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2786)
	at java.lang.StringCoding.safeTrim(StringCoding.java:64)
	at java.lang.StringCoding.access$300(StringCoding.java:34)
	at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:251)
	at java.lang.StringCoding.encode(StringCoding.java:272)
	at java.lang.StringCoding.encode(StringCoding.java:284)
	at java.lang.String.getBytes(String.java:986)
	at br.unesp.ourinhos.utility.Hash.generateHash(Hash.java:43)
	at br.unesp.ourinhos.business.MaterialBusiness.persist(MaterialBusiness.java:71)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:307)
	at org.mentawai.filter.FileUploadFilter.filter(FileUploadFilter.java:201)
	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
	at org.mentawai.core.Controller.invokeAction(Controller.java:849)
	at org.mentawai.core.Controller.service(Controller.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)

Alguém tem alguma idéia?

Antes de qualquer coisa: já alterei a variável JAVA_OPTS do arquivo /etc/init.d/tomcat6 para o valor -Xms64m -Xmx1024m e não há limitação de tamanho de arquivo para upload (mas caso alguém lembre de algum parâmetro do server.xml seria legal citar),

Obrigado pela atenção.

Consegui resolver o problema:

export JAVA_OPTS="-server -Xms512m -Xmx1536m";

Para que não haja problemas caso o servidor seja reiniciado coloquei esse comando no arquivo /etc/profile.

Obrigado.