Jasper consume 100% de CPU

Buenas tardes. Desde que pasamos de la 3.16 a la 3.20.1 estamos teniendo problemas con jasper. Vemos que consume el 100% de CPU cada cierto tiempo, dejando el sistema muy lento hasta que reiniciemos el servicio de jasper.

Tenemos dos servicios de jasper levantado:
java -jar /usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 &

java -jar /usr/local/proyectos/g3w3/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8082 &

La solución de levantar dos jasper la encontramos con ustedes porque en la 3.20 se caia el servicio de jasper cada tanto. Luego de levantar 2 dejó de pasar.
Nos pasa en los ambientess de prueba y el de Producción. Son VM con 6 VCPU y 16GB de RAM. Debian 10.12. Openjdk version “11.0.15”
Tienen algún caso que haya pasado en el que jasper les consumía tanto CPU? gracias!

Agustín

Ir a la issue.

Hola Agustin,

Revisa el ultimo mensaje de este foro: https://foro.comunidad.siu.edu.ar/index.php?topic=24547.msg111826
Por favor seguilo minuciosamente y con eso deberías quedar usando la versión 5.6.1.1 de Jasper la cual funciona bien.

saludos.
2

Buenos días, estamos probando GUARANI 3.22 y estamos teniendo problemas con el servidor Jasper. Cuando lo iniciamos, probamos generar algún reporte desde el sistema y queda la pantalla en blanco. Guarani3 Gestión lo tenemos solo en el servidor con 16 GB de RAM.

Consulta ¿donde puedo consultar la versión de jasper que estamos usando? cuando lo inicio me arroja la siguiente info.

Si tengo que actualizar la versión de Jasper, ¿como se realiza este proceso?

Saludos

Hola @gmiranda

Anda por esta solución: Siu Guarani - Problemas para descargar el PDF desde el autogestion - nº 12 por lleonardis

Saludos.

Buen día Leonel, mi nombre es Fernando y voy a seguir trabajando con este tema a partir de lo consultado por Gabriela.
Mire la solución que propones y la implemente a partir del punto 4) porque la instancia Gestión la tenemos en la versión 3.22.1:
4. Configurar la directiva java.pipe_dir en /etc/php/7.4/apache2/php.ini apuntado un directorio con permisos de escritura y lectura. A esto lo dejamos así:
al final del archivo php.ini agregamos la linea:
java.pipe_dir = /usr/local/proyectos/grado/temp con permiso de lectura y escritura
6. Si configurando la directiva java.pipe_dir no funciona, entonces dar permisos a la carpeta /dev/shm (yo le di chmod 7777 -R /dev/shm). Como no funciono el paso 4) ejecutamos:
chmod 777 -R /dev/shm
8. Poner la directiva display_errors = Off en el php.ini, ya que sino mete warnings/notices en el PDF y queda corrupto. Esta variable estaba en OFF
9. Reiniciar Apache.
10. Reinicia Jasper.

Consulta puedo hacer funcionar el jasper de Gestión independientemente del jasper de Autogestión? o debo hacerlos funcionar a los 2 en simultaneo?
Llegue hasta esta parte de la solución y sigue sin funcionar, quiero imprimir la historia académica de un alumno y me abre una venta con la siguiente url en blanco:
http://ip_server/guarani_grado/3.22/aplicacion.php?ah=st6807ae6df1c572.96806442&ai=guarani||41000086&tcm=central&ai=guarani||41000086&ts=vista_jasperreports&tsd=guarani||41000625,

Espero alguna indicación, muchas gracias!

Hola Fernando,

Consulta puedo hacer funcionar el jasper de Gestión independientemente del jasper de Autogestión? o debo hacerlos funcionar a los 2 en simultaneo?

Si, acá mismo abajo del punto 8. Reinicia Jasper lo explica: Siu Guarani - Problemas para descargar el PDF desde el autogestion - nº 12 por lleonardis. El Jasper para Gestión lo levanta en el puerto 8081 y para Autogestión en el puerto 8082. Luego en Configuración de Jasper te explica como se configura.

Revisa los logs de Jasper para ver que error da el imprimir.

Saludos.

Hola Leonel, viendo el jasper.log veo el siguiente error:

Apr 23 09:26:48 VMBridge ERROR: An exception occured: net.sf.jasperreports.engine.JRException: Error saving file : /usr/local/proyectos/grado/temp/800SIUMAT5>
net.sf.jasperreports.engine.JRException: Error saving file : /usr/local/proyectos/grado/temp/800SIUMAT511.jrxml.jasper
at net.sf.jasperreports.engine.util.JRSaver.saveObject(JRSaver.java:93)
at net.sf.jasperreports.engine.util.JRSaver.saveObject(JRSaver.java:66)
at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:272)
at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:252)
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at php.java.bridge.JavaBridge.Invoke(JavaBridge.java:1050)
at php.java.bridge.Request.handleRequest(Request.java:415)
at php.java.bridge.Request.handleRequests(Request.java:491)
at php.java.bridge.http.ContextRunner.run(ContextRunner.java:146)
at php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60)
Caused by: java.io.FileNotFoundException: /usr/local/proyectos/grado/temp/800SIUMAT511.jrxml.jasper (Permiso denegado)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.(FileOutputStream.java:213)
at java.io.FileOutputStream.(FileOutputStream.java:162)
at net.sf.jasperreports.engine.util.JRSaver.saveObject(JRSaver.java:83)

Hola Fernando,

Parece ser un tema de permisos, te faltó ejecutar los pasos 6) de Instalación desde cero de SIU-Guaraní Gestión 3.20 en entorno de Desarrollo, en particular la carpeta <path proyecto Guaraní>/temp:

ChatGPT me dice:

El error que estás viendo es muy claro:

Caused by: java.io.FileNotFoundException: /usr/local/proyectos/grado/temp/800SIUMAT511.jrxml.jasper (Permiso denegado)

Significa que el proceso Java que está intentando compilar y guardar el reporte no tiene permisos de escritura en el directorio:

/usr/local/proyectos/grado/temp/

:white_check_mark: Solución

Debes asegurarte de que el usuario bajo el cual estás ejecutando Jasper (probablemente www-data, apache, nobody, u otro) tenga permisos de escritura en ese directorio.

:hammer_and_wrench: Cómo hacerlo

Ejecutá lo siguiente como superusuario (root o con sudo):

sudo chown -R tu_usuario:tu_grupo /usr/local/proyectos/grado/temp
sudo chmod -R 775 /usr/local/proyectos/grado/temp

Por ejemplo, si estás corriendo el servidor con el usuario www-data:

sudo chown -R www-data:www-data /usr/local/proyectos/grado/temp

:warning: Alternativamente, si querés permitir a todos escribir (solo como prueba rápida o en entornos sin riesgo):

sudo chmod -R 777 /usr/local/proyectos/grado/temp

Aunque esto no es recomendado para producción por razones de seguridad.


:test_tube: Verificá

Después de cambiar los permisos, volvé a ejecutar el proceso Jasper y deberías ver que el error desaparece y el archivo .jasper se genera correctamente.

Saludos.

Leonel, mire los archivos .jasper en el directorio /tmp y tenían como usuario al www-data, lo cambie por el usuario con el que accedo al servidor y tiene permisos sudo; y empezó a funcionar.
Ultima consulta sobre este tema, en la sentencia:

sudo chown -R tu_usuario:tu_grupo /usr/local/proyectos/grado/temp

tu_usuario es el usuario con el que estamos logueados en la maquina o que se refiere?

Perfecto @faraya

tu_usuario es el usuario con el que estamos logueados en la maquina o que se refiere?

Lo importante es que www-data o el usuario de Apache tenga permisos de escritura en /usr/local/proyectos/grado/temp que es donde se guardan los archivos temporales para la generación del PDF.

chown -R $(whoami):www-data www temp instalacion vendor/siu-toba/framework/www vendor/siu-toba/framework/temp
chmod 775 -R www temp instalacion vendor/siu-toba/framework/www vendor/siu-toba/framework/temp

$(whoami) devuelve el usuario de consola con que estas “logueado”, pero www-data es el grupo de Apache, si agregas usuarios al grupo www-data también van a heredar los permisos. Esto es mas un tema de permisos de Linux.

Saludos.

Buen día Leonel! sigo trabajando con este tema pero ahora con la interfaz Autogestíon.
En esta interfaz una vez generado el pdf de constancia de alumno regular, al momento de abrir el pdf el sistema se cuelga y no vuelve a responder.
Los pasos que realice son los siguientes:
al final del archivo php.ini agregamos la linea:
java.pipe_dir = /home/gmiranda/temp con permiso de lectura y escritura

le di permisos a la carpeta /dev/shm ejecutamos:**
chmod 777 -R /dev/shm

Puse la directiva display_errors = Off en el php.ini

cuando reviso el log veo el siguiente error:
Apr 24 10:41:54 VMBridge ERROR: An exception occured: java.io.FileNotFoundException: /tmp/.php_java_bridgetQq7nu.o (No existe el fichero o el directorio)
java.io.FileNotFoundException: /tmp/.php_java_bridgetQq7nu.o (No existe el fichero o el directorio)

Espero me puedas ayudar.

Hola @faraya

¿existe la carpeta /home/gmiranda/temp? ¿tiene los permisos correctos?

Busca en el foro “VMBridge ERROR: An exception occured: java.io.FileNotFoundException” y van a aparecer varios hilos con solución: Resultados de búsqueda para «VMBridge ERROR: An exception occured: java.io.FileNotFoundException» - Foro Comunidad SIU

Te dejo una respuesta del ChatGPT:

Ese error indica que el JavaBridge está intentando acceder a un archivo temporal en /tmp, pero no lo encuentra:

java.io.FileNotFoundException: /tmp/.php_java_bridgetQq7nu.o (No existe el fichero o el directorio)

:magnifying_glass_tilted_left: ¿Qué significa esto?

JavaBridge genera archivos temporales para la comunicación entre PHP y Java. Si /tmp se limpia, se reinicia el sistema, o si el archivo se borra o no se genera correctamente, se lanza este error.


:white_check_mark: Soluciones posibles

1. Asegurarte de que el directorio /tmp existe y tiene permisos adecuados

ls -ld /tmp

Debería mostrar algo como:

drwxrwxrwt 10 root root 4096 ... /tmp

Si no tiene esos permisos, arreglalo con:

sudo chmod 1777 /tmp

2. Reiniciar el servidor Apache o PHP-FPM

Esto puede regenerar los archivos temporales correctamente:

sudo systemctl restart apache2
# o
sudo systemctl restart php-fpm

3. Verificar que no estás borrando los archivos temporales manualmente

A veces, scripts de limpieza eliminan archivos en /tmp mientras están en uso. Si hay un cron que corre tmpreaper o tmpwatch, asegurate de excluir los archivos de JavaBridge o de reiniciar JavaBridge si es necesario.


4. Cambiar el directorio temporal para JavaBridge

Podés forzar que JavaBridge use otro directorio temporal creando una variable de entorno antes de lanzarlo, por ejemplo:

export TMPDIR=/usr/local/app/tmp
mkdir -p $TMPDIR
chmod 1777 $TMPDIR

Y luego iniciar JavaBridge desde ahí.


Saludos.