4 Replies Latest reply on Jan 30, 2018 10:17 PM by Edwin Rebaza Cerpa

    Quartz in Wildfly10 - Out of Memory

    Edwin Rebaza Cerpa Newbie

      Hi,

       

      I have a server in Windows 2012 Jre 32bit, and application server wildfly 10, and have a applicacion that has 5 job of quartz, in one moment the java heap space out and throw out of memory,

       

      my quartz aplication invoke to EJB3

       

      Attachment 2 files

      - QUARtz

      - EJB

       

      Please help.

       

       

      Edwin.

        • 1. Re: Quartz in Wildfly10 - Out of Memory
          Priyanka Tyagi Newbie

          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
            Edwin Rebaza Cerpa Newbie

            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
              Tomaz Cerar Master

              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
                Edwin Rebaza Cerpa Newbie

                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");