4 Replies Latest reply on Jan 30, 2018 10:17 PM by edwinrjrc

    Quartz in Wildfly10 - Out of Memory

    edwinrjrc

      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
          ptyagi_redhat.com

          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

            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

              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

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