-
1. Re: Quartz in Wildfly10 - Out of Memory
ptyagi_redhat.com Oct 27, 2017 3:22 AM (in response to edwinrjrc)What's the heap and perm size configured for this instance? If you are running Jboss/wildfly with 32bit JDK, there is a process size limitation of 4gb.
-
2. Re: Quartz in Wildfly10 - Out of Memory
edwinrjrc Nov 28, 2017 10:15 AM (in response to ptyagi_redhat.com)My Wildfly are running for default, At the beginning it works well and little by little it fills until it causes the overflow
-
3. Re: Quartz in Wildfly10 - Out of Memory
ctomc Nov 28, 2017 10:35 AM (in response to edwinrjrc)you have memory leak in your application somewhere, probably in one of the cron jobs.
best thing you can do is attach profiler and profile it.
-
4. Re: Quartz in Wildfly10 - Out of Memory
edwinrjrc Jan 30, 2018 10:17 PM (in response to edwinrjrc)This is my code, where exists memory leak
log.info("Inicio de Facturas Job");
Connection conn = null;
try {
ConsultasSoporteDao consultaDao = new ConsultasSoporteDaoImpl();
FacturasDao facturasDao = new FacturasDaoImpl();
Properties propiedades = new MyProperties().getProperties();
List<Empresa> empresas = consultaDao.obtenerEmpresas();
if (empresas == null || empresas.isEmpty()) {
throw new QuartzSFEException(
"No se han especificado las empresas a enviar a sunat");
}
Iterator<Empresa> it = empresas.iterator();
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = null;
Zip zip= new Zip();
while (it.hasNext()) {
String ruc = it.next().getNumeroRuc();
log.info("Inicia proceso de envio de facturas a sunat de " + ruc);
List<Comprobante> lista = facturasDao.listaFacturasSunat(ruc);
if(lista == null || lista.isEmpty()){
log.debug("No hay facturas pendientes por enviar a sunat, ruc"+ruc);
}
Map<String, Object> mapSunat = null;
List<Map<String, Object>> listaSunat = new ArrayList<Map<String, Object>>();
InputStream is = null;
for (Comprobante invoice : lista) {
String carpeta = UtilLib.generarRutaZip(invoice.getTipo().getCodigo(), invoice.getFechaEmision(), propiedades.getProperty("rutazipred"));
String nombreArchivo = UtilLib.nombreArchivoGeneral(invoice.getRucEmpresaEmite(), invoice.getTipo().getCodigo(), invoice.getNumero());
File facturaZip = new File(carpeta + File.separator + nombreArchivo+".zip");
try {
if(facturaZip.exists()){
is = new FileInputStream(facturaZip);
byte[] byteZip = IOUtils.toByteArray(is);
DataHandler dh = ConverterUtil.byteArrayADataHandler(
byteZip, "application/zip");
mapSunat = new HashMap<>();
mapSunat.put("invoice", invoice);
mapSunat.put("nombreArchivo", nombreArchivo);
mapSunat.put("contenidoArchivo", dh);
listaSunat.add(mapSunat);
is.close();
}
else{
log.error("Archivo "+nombreArchivo+" no encontrado en la carpeta "+carpeta);
}
} catch (FileNotFoundException e) {
log.error(e.getMessage());
log.error("Archivo "+nombreArchivo+" no encontrado en la carpeta "+carpeta);
} catch (IOException e) {
log.error(e.getMessage());
}
}
log.info(listaSunat.size()+" facturas listas para enviar a sunat");
ClienteWSSunat clienteBeta = new ClienteWSSunat(ruc);
if (listaSunat != null && !listaSunat.isEmpty()){
log.info("Inicio, envio de facturas a sunat");
List<Map<String, Object>> resultadoSunat = clienteBeta.enviarSunat(listaSunat);
log.info("Fin, envio de facturas a sunat");
log.info("Inicio, procesamiento de respuesta de sunat");
if (resultadoSunat != null && !resultadoSunat.isEmpty()) {
conn = ConnectionDB.connection();
Boolean exito = null;
Comprobante cabecera = null;
byte[] arregloByteSunat = null;
byte[] resultadoDescomprimido = null;
//LectorXML readXml = null;
ByteArrayInputStream bais = null;
for (Map<String, Object> arregloSunat : resultadoSunat) {
exito = (Boolean) arregloSunat.get("estadoExito");
cabecera = (Comprobante) arregloSunat.get("invoice");
if (exito.booleanValue()) {
log.debug("Comprobante ::"+cabecera.getNumero());
try {
arregloByteSunat = (byte[]) arregloSunat.get("contenidoSunat");
if (arregloByteSunat != null && arregloByteSunat.length > 0){
resultadoDescomprimido = zip.descomprimir(arregloByteSunat, arregloSunat.get("nombreArchivo").toString());
//readXml = new LectorXML(resultadoDescomprimido);
bais = new ByteArrayInputStream(resultadoDescomprimido);
doc = docBuilder.parse(bais);
doc.getDocumentElement().normalize();
bais.close();
cabecera.setCodigoSunat(UtilLib.obtenerDatoDocXml("cbc:ResponseCode",doc));
cabecera.setRespuestaSunat(UtilLib.obtenerDatoDocXml("cbc:Description",doc));
doc = null;
}
else{
cabecera.setCodigoSunat("ERR1");
cabecera.setRespuestaSunat("Respuesta Sunat en Blanco");
}
} catch(Exception e){
cabecera.setCodigoSunat("ERR0");
cabecera.setRespuestaSunat("Error envio a sunat");
log.error(e.getMessage(), e);
}
} else {
String descripcion = arregloSunat.get("mensajeError").toString();
cabecera.setCodigoSunat("ERR");
cabecera.setRespuestaSunat(descripcion);
}
log.info("comprobante "+cabecera.getNumero()+", "+cabecera.getRespuestaSunat());
facturasDao.guardarCdrComprobantes(cabecera, resultadoDescomprimido, conn);
}
if (conn != null){
conn.close();
}
} else {
log.info("Respuesta sunat en blanco");
}
log.info("Fin, procesamiento de respuesta de sunat");
log.info("Finaliza proceso de envio de facturas a sunat de " + ruc);
}
else{
log.info("LISTA DE FACTURAS VACIA");
log.info("Finaliza proceso de envio de facturas a sunat de " + ruc);
}
}
consultaDao = null;
facturasDao = null;
propiedades = null;
empresas = null;
it = null;
} catch (TailoyLibUtilException e) {
log.error(e.getMessage(), e);
} catch (QuartzSFEException e) {
log.error(e.getMessage(), e);
} catch (SQLException e) {
log.error(e.getMessage(), e);
} catch (ClienteWSSunatException e) {
log.error(e.getMessage(), e);
} catch (ConexionDBException e) {
log.error(e.getMessage(), e);
} catch (ParserConfigurationException e) {
log.error(e.getMessage(), e);
} finally{
try {
if (conn != null){
conn.close();
}
conn = null;
} catch (SQLException e) {
log.error(e.getMessage(), e);
}
}
log.info("Fin de Facturas Job");