Archivo de la categoría: 408

Alfresco Share: Error status 408 Read timed out

Buenas a todos.

Quiero compartir este problema porque, en un principio, no le encontramos solución buscando por Internet y creo que podría servirle a más de uno en el futuro:

Tenemos una instalación en un cliente con más de 100 gigas (y creciendo), unos 6.000 usuarios (creciendo también), un Alfresco 3.4.10 y una JVM de 8 gigas asignada (para la heap – Xmx y Xms).

Aqui el problema: Mediante un dashlet que mostraba todos los workflows de un usuario (usando el getPooledTasks del servicio del workflow), cuando intentaba rescatar alrededor de 5.100 tareas Alfresco no era capaz de reaccionar y nos mostraba este error a nivel de servidor de aplicaciones (catalina.out, o en mi caso el log hub de weblogic):

17:04:20,050  INFO  [webscripts.connector.RemoteClient] Error status 408 Read timed out
java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)….

El problema es que Alfresco, con la JVM que tiene (la heap en concreto) no es capaz de atender todas las peticiones que recibe, excediendo el tiempo que tiene establecido internamente para la respuesta entre Alfresco y Share (por defecto 120 segundos), de ahí a que muestre un read time out.

Investigando por Google encontramos varios JIRAs, pero hablan de la 4.0 y nosotros tenemos una 3.4. por lo que no nos servía.

Aquí la solución para Alfresco versión 3.4:

  1. Abrir el jar spring-webscripts-X.X.X-SNAPSHOT.jar que encontráis en webapps/alfresco/WEB-INF/lib/ y navega dentro de él por: org/springframework/extension/webscript/
  2. Copia spring-webscript-application-context.xml a tu carpeta web-extension (en shared/classes/alfresco) con el nombre custom-spring-webscript-application-context.xml
  3. Incrementa las propiedades <property name=»readTimeout»><value>120000</value></property>
  4. Reiniciar el Alfresco

Aquí la solución para Alfresco versión 5.x:

  1. Repetir paso 1: Por ejemplo en una 5.0.x sería en WEB-INF/lib el jar spring-webscripts-5.0.2.5.jar
  2. Extrae el jar y abre el archivo  {EXTRACTED_DISK_PATH}\org\springframework\extensions\webscripts\spring-webscripts-application-context.xml
  3. Localiza la propiedad readTimeout, la podrás encontrar dentro del bean <bean id=»connector.remoteclient.abstract» abstract=»true»>
  4. Modifica el valor (está en milisegundos) y reinicia tu alfresco.

Y listo, ahora con el tiempo de respuesta incrementado cuando desde Share manda la petición alfresco es capaz de atender las peticiones y de devolver todas las tareas de ese usuario :-)

¡Espero que os haya servido!

¡Un saludo!