Checklist Instancias Athento ECM

Resumen

Este documento define las pautas a la hora de hacer una auditoría o checklist de puntos que permiten implantar Athento ECM (basado en Nuxeo 6.0 en adelante) utilizando las mejores prácticas de acuerdo a la configuración del equipo, cantidad de usuarios etc.

En la mayoría de los casos, los problemas de rendimiento y escalabilidad se dan por problemas de:

  • Pool de Conexiones de la Base de Datos (DB Connection Pool, VCS Connection Pool), relacionado también con las sesiones http (los 3 números deben coincidir)
  • Tamaño de memoria del Heap
  • Espacio en Disco, teniendo en cuenta el posible crecimiento del Sistema
  • Errores en software, particularmente en los casos de código que abre conexiones con la Base de Datos y no las cierra correctamente.
  • Utilización de Elasticsearch en la misma instancia de producción.
  • En general, cuellos de botella con la Base de Datos (queries lentas, especialmente en comprobaciones de permisos). Se mitigan clusterizando Elasticsearch.

Descripción

Optimización de BD y de SO

Como root:

 

Configuración de la Base de Datos
root@ubuntu:~# vi /etc/postgresql/9.3/main/postgresql.conf

Para ello consultar la guía de Nuxeo para PostgreSQL y también la tabla propia sobre configuración en función del Hardware. 
The DBA is your friend! https://doc.nuxeo.com/display/NXDOC/Managing+Performance#ManagingPerformance-TheDBAisYourFriend
Tabla de configuración según el hardware para PostgreSQL: Base de Datos: Configuración
Existe documentación específica de Nuxeo para Oracle, SQLServer etc. que hay que consultar al realizar una instalación en estos sistemas.

 

Comprobar que tenemos habilitada la configuración open files por defecto: https://doc.nuxeo.com/display/KB/java.net.SocketException+Too+many+open+files

Deshabilitar cualquier servidor de Postgres adicional existente en la máquina. Por ejemplo, main. ¡CUIDADO! Sólo si main no se está usando para otras aplicaciones, por ejemplo, Athento SE.

    1. Para ello, basta con colocar el valor "disabled" o "manual" en el archivo start.conf del directorio main.

nuxeo.conf

  1. Configuración de elastic (ESTO YA ESTÁ INCLUIDO EN LOS SCRIPTS, ejemplo, ./install_cluster_node.sh nodo1 94.23.251.198,94.23.251.203 aktua)

    elasticsearch.override.pageproviders=default_search,document_content,section_content,document_content,tree_children,default_document_suggestion,simple_search,advanced_search,nxql_search,DEFAULT_DOCUMENT_SUGGESTION, GET_TASKS_FOR_ACTORS, GET_TASKS_FOR_PROCESS,GET_TASKS_FOR_PROCESS_AND_ACTORS, GET_TASKS_FOR_PROCESS_AND_NODE, GET_TASKS_FOR_TARGET_DOCUMENT, GET_TASKS_FOR_TARGET_DOCUMENT_AND_ACTORS, GET_TASKS_FOR_TARGET_DOCUMENTS, GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS, GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS_OR_DELEGATED_ACTORS, SAVED_SEARCHES, user_sections, user_workspaces, user_documents, user_favorites, domain_published_documents, GET_TASKS_FOR_ACTORS_OR_DELEGATED_ACTORS, domain_documents

    Configuración sobre DAM (pendiente validar en Applus, Miralles etc.):
    dam_saved_searches, dam_search, SAVED_DAM_SEARCHES, search_media_all, search_media_by_title, SHARED_DAM_SEARCHES

     

     

  2. Datos de configuración de Sesiones HTTP, pool VCS y pool db (ambos valores deben ser iguales). 
    This means that for a typical configuration, you will have: tomcat.http.threads = nuxeo.vcs.max-pool-size = nuxeo.db.max-pool-size.

  1.  

  2.  

    1. nuxeo.db.transactiontimeout=ms de espera por cada query de db

    2. nuxeo.vcs.idle-timeout-minutes <= tiempo de espera para cerrar la conexión (mantenerla en el pool)

      1. nuxeo.db.min-pool-size=1

      2. nuxeo.db.max-pool-size=100

      3. nuxeo.vcs.min-pool-size=1

      4. nuxeo.vcs.max-pool-size=100

    Ejemplo para memoria de 8GB = 50 para los tres valores.

    Configuración del HEAP.

    Existe documentación de Nuxeo sobre distintos parámentros, entre ellos el Heap de Java (pero están TODOS en esta página): https://doc.nuxeo.com/pages/viewpage.action?pageId=3866689

    RAM32Gb16GB
    Xmx8g4g
    Xms8g4g
    XX:MaxPermSize (< Java 8)1g1g

     

    ## Ejemplo de Heap size para una RAM de 32GB (Barclaycard Pro Spain, 2 instancias en la máquina virtual)
    JAVA_OPTS=-Xms4g -Xmx4g -XX:MaxPermSize=1024m

    JAVA_OPTS=-Xms8g -Xmx8g -XX:MaxPermSize=2g

    Se recomienda que el valor mínimo y máximo (Xms y Xmx) sean iguales para no incurrir en oscilaciones del Heap.
    Más información completa sobre configuración del Heap para entornos de producción aquí: http://blog.sokolenko.me/2014/11/javavm-options-production.html

  3.  

  4.  

  5.  

Configuración de IP y Puertos (puertos para comunicar con otras aplicaciones, puerto de impresión de soffice para generar PDFs etc.)
Ejemplo de cambio en configuración de Puertos: https://doc.nuxeo.com/display/ADMINDOC/Configuration+Examples

Comprobar que están instalados los últimos HF de Nuxeo y los add-ons base de Athento localizados en colibri.

 

Low Severity: Comprobar funcionamiento del Document Preview (el de la zona de anotaciones, web preview). 


Crear índices para optimización de consultas (ejecutar script config_db_optimization.sh que está en devops)

Comprobar que tenemos correcto el queryModelContrib tree_children para reducir tiempos de query en árbol (ejecutar script ./config_nuxeo_config_xml.sh )


https://bitbucket.org/athento/devops/src/61fe9f69b210709882a32aefce47f9d5633f4d33/athentoecm/contrib/nuxeo/config/?at=master

Revisar el log en busca de errores y tratar de minimizar la presencia de dichos errores de forma indefinida en la instancia. 
Una vez comprobado que no hay errores graves en la instancia, cambiar el modo de los LOGs a WARNING (en instancias de PRO). En modo DEBUG para TEST. Utilizar herramientas tipo SENTRY o similar para identificar los errores y resolverlos.

 

 

Otros puntos de control

 

  1. Si es una migración, comprobar que el acceso a la pestaña Summary de un documento es rápido. Si es lento, puede ser provocado por el widget summary_current_document_publications
  2. Comprobar que Elasticsearch no está embebido en Nuxeo(por defecto lo está) y que no tenemos problemas de que corra en la misma JVM que Nuxeo. https://doc.nuxeo.com/display/ADMINDOC/Elasticsearch+Setup
  3. Comprobar que el directorio de binaries tenga permisos de escritura, incluso los creados inicialmente en arranque dado que puede ocurrir que se creen como root y nuevos binarios con los mismos digest no puedan crearse.