Mas a sua JVM nao
Da uma olhada nos parametros de linha de comando (ou simplesmente procura no google por OutOfMemoryError)
Mas a sua JVM nao
Da uma olhada nos parametros de linha de comando (ou simplesmente procura no google por OutOfMemoryError)
Aqui:
.../netbeans-x.x/etc/netbeans.conf
Quando você ver este arquivo vai deduzir os parâmetros para a JVM, -Xm?256M
É só aumentar o necessário.
Para saber o significado de cada um, veja em $ man java, ou procure na documentação da Sun o que cada um significa.
Tente com estas configurações
-Xms512m -Xmx800m -XX : PermSize=128m -XX:MaxPermSize=256m
OBS : Eu deixei separado o XX : PermSize, para não sair emotion, na sua configuração coloque-os juntos.
Observando o topico fui dar uma olhanda no HotSpot e achei isso. Muito doido por sinal!
Big Heaps and Intimate Shared Memory (ISM)
Se você precisa melhorar a performance da jvm vale dar uma olhada no link:
http://java.sun.com/docs/hotspot/VMOptions.html
Ah, voce nao sabe o que é HotSpot?
So uma pergunta, o que voce esta tentando fazer que esta gerando esse erro?
Imaginei que fosse realmente em uma consulta. Geralmente quando esses erros acontecem e porque existe algum erro de logica afinal todas as configurações padrões do HotSpot já são suficientes.
Nesse caso eu aconselharia fazer paginação dos dados. Primeiro porque o usuario nunca vai olhar todos esses registro e segundo porque ficaria bem mais rapido mesmo que você aumente o tamanho da heap.
select * from tabela offset 10 limit 10
Essa query por exemplo faz o que eu te falei no banco de dados postgreSQL. Ela pega um limite de 10 registro a começar pelo decimo registro do total de registro.
No firebird seria: select first 10 skip 10 * from tabela;
Se você estiver utilizando algum framework OR tipo o Hibernate é possível tambem.
HibernateUtil.getSession().createCriteria(MinhaClasse.class)
.addOrder(Order.desc("id"))
.setFirstResult(10)
.setMaxResults(10)
.list();
Até …
[quote]Code:
select * from tabela offset 10 limit 10
Essa query por exemplo faz o que eu te falei no banco de dados postgreSQL. Ela pega um limite de 10 registro a começar pelo decimo registro do total de registro.
No firebird seria: Code:
select first 10 skip 10 * from tabela;
[/quote]
como eu faço isso no oracle??? via SQL??
SELECT *
FROM
(SELECT *
FROM TABELA)
WHERE ROWNUM BETWEEN 10 AND 19
nao funciona!!!
Análise Top-N
É vantajoso e eficiente usar o recurso de consultas Top-N, onde se faz uma sub-consulta (view em-linha) ordenada pelo critério desejado, como fonte para uma consulta externa onde se usa a pseudo-coluna ROWNUM para limitar a quantidade de linhas no resultado.
forma geral:
select * from
( select * from tabela
order by critério )
where ROWNUM <= :N;
Ex.:
select * from
( select a.*, rownum rnum from
(select 'numero '||rownum campo
from all_tables
) a
where rownum <= 30 )
where rnum >= 10
Paginação
Consultas paginadas, comuns no ambiente web, caracterizadas pela exibição gradual de resultados (quantidade por página). Se a cada página são exibidas M linhas resultantes, na primeira página exibem-se as linhas 1 a M, na página 2 as linhas M+1 a 2M, na página P as linhas (P-1)M+1 a PM. Para isso, basta fazer uma consulta top-N para selecionar as primeiras PM linhas (LINHA_FINAL), aninhada em uma consulta mais externa que descarte as (P-1)*M primeiras linhas (LINHA INICIAL).
forma geral:
select * from
( select /*+ FIRST_ROWS(n) */
topn.*, ROWNUM rnum
from ( sua_consulta_entra_aqui,
order by critério, ROWID ) topn
where ROWNUM <= :LINHA_FINAL )
where rnum > :LINHA_INICIAL;
Ex.:
select * from
( select /*+ FIRST_ROWS(20) */
topn.*, ROWNUM rnum from
( SELECT DR.CAMPO1, DR.CAMPO2, DR.CAMPO3
FROM TABELA1 DR
order BY ROWID ) topn
where ROWNUM <= 40 ) -- LINHA FINAL
where rnum >= 21 -- LINHA INICIAL
Função de Paginação em consulta (JAVA+ORACLE)
Retorna uma consulta paginada
Parametro strQuery consulta original; Parametro pagina página que deseja retornar; Parametro elementos quantidade de registros por página; Returno String.
public String paginar(String strQuery, int pagina, int elementos) {
if (pagina> 1) {
pagina = (pagina- 1) * elementos+ 1;
} else {
pagina = (pagina- 1) * elementos;
}
return (?SELECT * FROM (SELECT a.*, rownum rnum FROM (? +
strQuery + ?) a WHERE rownum <= ? + (pagina + elementos) + ?) ? +
?WHERE rnum >= ? + pagina);
}
[quote=Eliezer Reis]Observando o topico fui dar uma olhanda no HotSpot e achei isso. Muito doido por sinal!
Big Heaps and Intimate Shared Memory (ISM)
Se você precisa melhorar a performance da jvm vale dar uma olhada no link:
http://java.sun.com/docs/hotspot/VMOptions.html
Ah, voce nao sabe o que é HotSpot?
http://www.javafree.org/javabb/viewtopic.jbb?t=6776[/quote]
Ola!
Vi o help que você deu quanto ao erro de heap space.
Eu também estou com o mesmo erro, porém estou compilando o JME e ta dando
java.lang.OutOfMemoryError: Java heap space
Ja fiz os procedimentos de aumentar memória JVM e nada de funfar…você tem alguma idéia do que possa ser?
Abraços.
Vera.
Aew pessoal estou o mesmo problema!!
java.lang.OutOfMemoryError: Java heap space!
acho que pode ser como nosso amigo Eliezer diz. tenho banco que possui em torno de 1500 resultados por tabela e quando passo de 1200 ele começa a dar esse erro. oque fazer??? uso o mysql, existe este tipo se seleçao por linhas no mysql?
ou o erro esta em outro lugar?
stacktrace:
SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.registerStatement(ConnectionImpl.java:4321)
at com.mysql.jdbc.StatementImpl.<init>(StatementImpl.java:275)
at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2382)
at Conexao.executeSQL(Conexao.java:58)
at GerarMapa.doPost(GerarMapa.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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:128)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
07/07/2009 11:50:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.OutOfMemoryError: Java heap space
07/07/2009 11:50:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at com.mysql.jdbc.SingleByteCharsetConverter.toString(SingleByteCharsetConverter.java:327)
at com.mysql.jdbc.ResultSetRow.getString(ResultSetRow.java:787)
at com.mysql.jdbc.ByteArrayRow.getString(ByteArrayRow.java:67)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5571)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
at GerarMapa.doPost(GerarMapa.java:78)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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:128)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Procure ver:
// 1º quanto tem ?
System.out.println(Runtime.getRuntime().maxMemory());
//2º quanto estou usando ?
System.out.println(Runtime.getRuntime().totalMemory());
//quanto ainda tem ?
System.out.println(Runtime.getRuntime().freeMemory());
Realmente deu o estouro de memoria olha o so o ultimo resultado antes do erro:
1º quanto tem ? :66650112
2º quanto estou usando ?:66650112
3 quanto ainda tem ?:62376
como faço pra reutilzar a memoria ja usada uma ver que nao estou utilizando tanta memora assim?
aqui vai o codigo da minha servlet que causa o estouro da memoria:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GerarMapa extends HttpServlet {
private static final long serialVersionUID = 1L;
private Conexao conexao;
private String lon;
private String lat;
private String codigoDet;
private PrintWriter out;
public GerarMapa() {
super();
conexao = new Conexao();
conexao.conecta();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("1º quanto tem ? :"+Runtime.getRuntime().maxMemory());
System.out.println("2º quanto estou usando ?:"+Runtime.getRuntime().totalMemory());
System.out.println("3 quanto ainda tem ?:"+Runtime.getRuntime().freeMemory());
codigoDet = "02";//request.getParameter("codigo");
if(codigoDet!=null){
out = response.getWriter();
if(codigoDet!=""){
conexao.executeSQL("SELECT latitude, longitude from dbtech.rastreamento where codigoDetento = '"+codigoDet+"'");
try{
conexao.resultset.last();
lat = conexao.resultset.getString("latitude");
lon = conexao.resultset.getString("longitude");
out.write(lat+"!"+lon);
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
}
}
Opa, bom dia pessoal. Tudo bem?
Quanto de memória o servidor tem?
Aumente o xmx para 1024 e reinicie a JVM. Veja se vai parar.
Cara, ja resolvi esse erro.
é necessario fechar a conexao com o BD depois de cada query. como eu não estava fechando, estourava a memoria com os resultset que eram armazenados enquanto o Garbage Collector não passava.
Erro simples de prograçao
galera…eu ainda nao saquei!
eu fiz o :
// 1º quanto tem ?
System.out.println("----->"+Runtime.getRuntime().maxMemory());
//2º quanto estou usando ?
System.out.println("----->"+Runtime.getRuntime().totalMemory());
//quanto ainda tem ?
System.out.println("----->"+Runtime.getRuntime().freeMemory());
meu resultado foi esse:
----->259522560
----->239419392
----->184755472
eu uso o eclipse aqui…como eu aumento a memoria??? nao é em algum dos arquivos de configuração do tomcat???
Posta o teu erro completo aqui.
e o codigo onde ta dando erro
[quote=MarcosOLIVEIRA]Posta o teu erro completo aqui.
e o codigo onde ta dando erro
[/quote]
basicamente o erro ocorre quando eu tento fazer um upload de um video atraves do componente JSF rich:fileUpload
quando eu faço upload de videos pequenos, não dá erro, quanto tento algum video de 100 megas aparece esse erro:
16:09:04,344 ERROR BaseXMLFilter:199 - Exception in the filter chain
javax.servlet.ServletException: Servlet execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:367)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at org.ajax4jsf.request.MultipartRequest$FileParam.appendData(MultipartRequest.java:244)
at org.ajax4jsf.request.MultipartRequest.readData(MultipartRequest.java:468)
at org.ajax4jsf.request.MultipartRequest.readNext(MultipartRequest.java:428)
at org.ajax4jsf.request.MultipartRequest.parseRequest(MultipartRequest.java:619)
at org.richfaces.component.FileUploadPhaselistener.beforePhase(FileUploadPhaselistener.java:63)
at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
... 17 more
08/07/2010 16:09:04 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at org.ajax4jsf.request.MultipartRequest$FileParam.appendData(MultipartRequest.java:244)
at org.ajax4jsf.request.MultipartRequest.readData(MultipartRequest.java:468)
at org.ajax4jsf.request.MultipartRequest.readNext(MultipartRequest.java:428)
at org.ajax4jsf.request.MultipartRequest.parseRequest(MultipartRequest.java:619)
at org.richfaces.component.FileUploadPhaselistener.beforePhase(FileUploadPhaselistener.java:63)
at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:367)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
o q pode estar errado???
O que pode estar ocorrendo é que voce esta colocando o video todo em memoria antes de fazer o upload.
assim “estourando” a memoria.
talvez se voce criasse um buffer que le parte do arquivo que esta no disco, e envia por partes sem instanciar o arquivo em memoria, possa resolver.
acho que no seu bean deve ter algum metodo que faça o carregamento do video…
se sim, isso pode ajudar
File arquivo = //o arquivo que voce quer mandar
FileInputStream fileIn = new FileInputStream(arquivo);
BufferedInputStream buffIn = new BufferedInputStream(fileIn);
int tamanho;
byte[] buffer = new byte[1024];//pode ser qualqer tamano que voce quiser
while ((tamanho = buffIn.read(buffer)) != -1) {
//aqui voce envia o buffer que é a divisao do arquivo
}
Parece um pouco complicado mesmo… Mas ja fiz isso usando sockets para envio de arquivos pela rede.
talvez a ideia te ajude mais que o codigo.