Bom dia fórum.
Tenho um programa que gera imagens, e deixo ele rodando em várias máquinas para ganhar tempo.
O total de imagens é um valor alto - 6.000.000 (6 milhões), e após gerar 37.568 imagens, em uma das máquinas, o programa parou e apresentou a seguinte mensagem: [bizarro]
[quote]kgefec: fatal error 0
kgepop: no error frame to pop to for error 21503[/quote]
Em outra máquina, após gerar 4289 imagens, o programa parou e apresentou o que parecia ser uma exceção:
[quote]Exception in thread “main” java.sql.SQLException: ORA-01555: instantâneo muito antigo: número de segmento de rollback 10 com nome “_SYSSMU10$” muito pequeno
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.oci8.OCIDBAccess.check_error(OCIDBAccess.java:2321)
at oracle.jdbc.oci8.OCIDBAccess.fetch(OCIDBAccess.java:2009)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:277)
at file_creator.Principal.main(Principal.java:84)
[/quote]
Em uma outra máquina, depios de gerar 40.153 imagens, parou e deu a seguinte mensagem: [mais bizarro ainda]
[quote]#
An unexpected error has been detected by HotSpot Virtual Machine:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c911899, pid=3768, tid=2480
Java VM: Java HotSpot™ Client VM (1.5.0_09-b03 mixed mode)
Problematic frame:
C [ntdll.dll+0x11899]
An error report file with more information is saved as hs_err_pid3768.log
If you would like to submit a bug report, please visit:
O primeiro erro e o segundo são relacionados ao servidor Oracle.
No primeiro, eu acho que vc chegou a um limite de memória do servidor (eu acho!!)
No segundo, o erro foi na transação.
Já o terceiro parece ser uma falha de acesso a memória.
Como vc está fazendo a geração dessas imagens?
Sugestão, coloque threads para controlar e executar o serviço. E se depender de consulta a dados para cada imagem, procure detonar os objetos para que o Garbage Colector trabalhe perfeitamente. Coloque tambem uma JVM de alta performance, um JIT da vida… Vc está consumindo muito recurso da máquina.
Sim, para cada 4 imagens realizo uma consulta, pego os bytes do blob do oracle, e gero o jpg.
Depois disso atualizo uma tabela de status, e fecho todos os objetos de conexao, rs e pstmt.
É um loop, e começa tudo de novo depois, até completar as 6.000.000.
JIT? q isso?!?!?!
Pra que eu usaria uma Thread, para controlar intervalos de tempo?
[quote=nbluis]O Segundo é do oracle, vc está dando os commits a cada inserção? Ali indica estouro do segmento de rollback.
Vc pode aumentar o segmento se quiser.
[/quote]
Sim, eu dou commit em todas as transações e logo em seguida fecho todos os objetos, para depois abrir de novo, em cada passagem pelo loop.
O estranho é q em cada máquina deu um erro diferente.
Como faço pra aumentar a capacidade do segmento de rollback? Não posso configurar para não ter nenhum espaço reservado para rollbacks?
Vlw[]´s!