# Asignación de memoria para servicios

A medida que su negocio se expande y el número de dispositivos conectados aumenta inevitablemente, también lo hace la demanda de recursos para garantizar el correcto funcionamiento de la plataforma Navixy. Si bien la potencia de la CPU y el espacio en disco se asignan según sea necesario sin limitaciones, la cantidad máxima de RAM que se puede utilizar está estrictamente regulada por las configuraciones del sistema. Por lo tanto, puede llegar un momento en el que constate que la memoria asignada es insuficiente y sea necesario ampliarla. En esta sección, proporcionaremos orientación sobre cómo localizar los archivos de configuración requeridos y realizar los ajustes necesarios para optimizar el rendimiento de la plataforma.

{% hint style="danger" %}
Al modificar las configuraciones que rigen el inicio de los servicios, se requiere la máxima precaución. Edítelas con gran cuidado y atención para garantizar un funcionamiento fluido.

**¡Recuerde!** Los cambios descuidados en la configuración pueden provocar la total inoperatividad del servicio.\
Antes de realizar cualquier cambio en la configuración, es aconsejable crear una copia de seguridad. Dado que la configuración es simplemente un archivo de texto, puede almacenarlo de forma segura en un directorio separado o guardar su contenido en otro lugar, garantizando su integridad y evitando cualquier pérdida potencial.
{% endhint %}

## Servicios Java

El backend de la plataforma Navixy consta de tres servicios Java. Las configuraciones predeterminadas asignan las siguientes cantidades de RAM para ellos:

* API-server - 1024 Mb
* SMS-server - 512 Mb
* TCP-server - 1024 Mb

Esta cantidad de memoria es suficiente para un funcionamiento estable de la plataforma con hasta varios miles de dispositivos registrados. Sin embargo, si experimenta inestabilidad en la plataforma, como consultas API lentas, generación de informes prolongada o problemas con el procesamiento de datos de los rastreadores, aumentar la cantidad de memoria asignada puede ser una solución. A continuación veremos dónde encontrar las configuraciones que especifican este valor, dependiendo de cómo esté desplegada la plataforma.

Se recomienda especificar la cantidad de memoria asignada como un **múltiplo de 1024**. El valor se especifica por servicio por separado.

{% hint style="info" %}
Al editar las configuraciones, es crucial considerar la memoria total disponible. Esto garantiza que no especifique una cantidad que exceda las limitaciones físicas. Al hacerlo, puede optimizar eficazmente el rendimiento y evitar posibles problemas. Además, si los servicios Java y la base de datos están ubicados en el mismo servidor, no olvide dejar suficiente espacio para la operación de la base de datos: por defecto es el 70% de toda la memoria.
{% endhint %}

#### Linux - servicios systemd

Para las versiones actuales de la plataforma (tanto las instaladas recientemente como aquellas que han recibido las últimas actualizaciones), **systemd** se utiliza como el gestor de inicio de servicios. Las configuraciones de inicio se encuentran en los directorios de servicio en las siguientes rutas:

* `/home/java/api-server/api-server.service.env`
* `/home/java/sms-server/sms-server.service.env`
* `/home/java/tcp-server/tcp-server.service.env`

Dentro de cada archivo hay una línea como `MAX_HEAP_SIZE="1024m"`. Especifique la cantidad de memoria que desea asignar al servicio en megabytes. No olvide conservar la letra `m` que representa megabytes.

[Reinicie la plataforma o el servicio específico](https://www.navixy.com/docs/on-premise/es/on-premise/how-to-guide/maintenance/restarting-instance) para aplicar los cambios.

#### Linux - servicios runit

Si decide no cambiar a systemd al actualizar su plataforma a la versión más reciente (esta opción se ofrece durante las actualizaciones automáticas), o en caso de que esté utilizando una versión antigua de la plataforma Navixy On-premise, los servicios Java utilizan **runit** como supervisor de servicios. También tiene sus propios archivos de configuración, que se encuentran en las siguientes rutas:

* `/etc/sv/api-server/run`
* `/etc/sv/sms-server/run`
* `/etc/sv/tcp-server/run`

Entre los parámetros dentro de cada archivo encontrará un valor `Xmx` - este es la cantidad máxima de memoria que se puede asignar al servicio Java correspondiente. El parámetro completo tiene este aspecto: `-Xmx1024m` - esto significa que se asignan 1024 Mb de RAM al servicio. Edite este valor y especifique lo necesario, luego guarde el archivo.

Reinicie la plataforma con el `restart-navixy` comando para aplicar los cambios.

#### Linux - instancia dockerizada

En la versión dockerizada de la plataforma, la asignación de memoria se establece cuando se despliegan los contenedores, es decir, cuando se ejecuta el `docker compose up -d` comando. Este es un paso obligatorio al instalar y actualizar una instancia, pero puede realizarse independientemente de estos procesos.

Aunque las configuraciones básicas de la instancia se especifican en el `.env` archivo, se utiliza un archivo llamado `compose.yaml` para configurar el funcionamiento de los contenedores: se encuentra en la misma carpeta de trabajo de la instancia que los demás archivos del sistema.

Dentro de este archivo, puede ver las diversas secciones que establecen las opciones de inicio para todos los contenedores. Para cambiar la cantidad de memoria asignada a los contenedores *api*, *sms* y *tcp* necesita encontrar las secciones correspondientes y añadir la opción `"MAX_HEAP_SIZE="` a la subsección `environment` , por ejemplo:

```
- "MAX_HEAP_SIZE=2048m"
```

A continuación hay un ejemplo de cómo se hace esto para *api-server* en una instancia existente:

![](https://4055106527-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-e3209eb99957ff2b0928e0c405941d768a6a407b%2Fimage-20230921-082139.png?alt=media)

Guarde el archivo.

Después de aplicar los cambios, ejecute el siguiente comando estando en el directorio de trabajo:

```
docker compose up -d
```

Esto recreará los contenedores teniendo en cuenta las nuevas configuraciones.

{% hint style="info" %}
El `compose.yaml` El archivo se reemplaza cuando la instancia dockerizada de Navixy se actualiza, y en ese caso las configuraciones mencionadas arriba deben realizarse nuevamente. Puede hacerlo antes de ejecutar inicialmente la instancia recién actualizada para poder ejecutarla de inmediato con las configuraciones necesarias.
{% endhint %}

#### Windows - servicios wrapper

Los servicios Java no están diseñados para ejecutarse en Windows por defecto, por lo que se utiliza software de terceros para habilitarlos. Se llama **YAJSW (Yet Another Java Service Wrapper)** y está diseñado para convertir archivos ejecutables jar normales en servicios de Windows. Este software se incluye en el paquete de distribución de la plataforma Navixy y se configura durante la instalación inicial.

Wrapper no tiene un directorio de instalación estándar y puede ubicarse en cualquier lugar, pero normalmente se coloca en `C:\java\wrapper` carpeta. En su interior encontrará la carpeta `\conf` que contiene los archivos de configuración para los tres servicios:

* `wrapper.api-server.conf`
* `wrapper.sms-server.conf`
* `wrapper.tcp-server.conf`

Al final de cada una de las configuraciones se encuentran los ajustes de inicio del servicio, e incluyen una línea como:

```
wrapper.java.additional.3 = -Xmx1024m
```

El valor del parámetro `-Xmx1024m` significa que se asignan 1024 Mb de RAM al servicio. Edite este valor y especifique la cantidad de RAM requerida, conservando la `m` letra, luego guarde el archivo.

[Reinicie el/los servicio(s)](https://www.navixy.com/docs/on-premise/es/on-premise/how-to-guide/maintenance/restarting-instance) para aplicar los cambios.

## MySQL

La base de datos es el servicio que más consume recursos dentro de la plataforma. Cuando un gran número de dispositivos ejerce presión sobre una memoria limitada, la base de datos puede tener dificultades para manejar todas las solicitudes entrantes. En consecuencia, esto puede resultar en que la plataforma Navixy funcione de forma lenta e inestable. Recomendamos encarecidamente supervisar el rendimiento de la base de datos y, si es necesario, aumentar la capacidad de RAM del servidor.

La cantidad de RAM asignada a la base de datos es un valor estático que se especifica en la configuración de MySQL. Generalmente se recomienda mantener este valor en el 70% de la cantidad total de RAM del servidor. Por lo tanto, si aumenta la cantidad total de RAM para mejorar el rendimiento de la base de datos, debe cambiar el valor en la configuración después de ello.

El archivo de configuración de MySQL se encuentra en la siguiente ruta:

* Linux: `/etc/mysql/mysql.conf.d/mysqld.cnf`
* Windows: `C:\ProgramData\MySQL\MySQL Server 8\my.ini`

En la sección `[mysqld]` de esta configuración, encontrará el parámetro `innodb_buffer_pool_size` - que establece la cantidad de memoria asignada para la base de datos. Si el tamaño actual es insuficiente, cambie el parámetro en consecuencia (asegúrese de conservar la unidad de medida - `G` para gigabytes). Guarde el archivo y reinicie MySQL.
