En este artículo se aborda un problema conocido que puede ocurrir en dispositivos FortiGate cuando la memoria del sistema disponible es baja. Este problema es especialmente relevante para modelos más pequeños de FortiGate (como FortiGate-40F y 60F) que cuentan con menos memoria disponible, lo que incrementa la posibilidad de que se presente la situación. A continuación, se presentará una guía práctica para diagnosticar y solucionar este inconveniente.
Descripción del problema
Este artículo describe un problema que se rastrea como parte del problema conocido #1025114. La falla se desencadena cuando la memoria disponible en el FortiGate es baja, lo que puede llevar a un rendimiento deficiente o interrupciones en el tráfico de los usuarios.
Alcance
Este problema afecta a las versiones de FortiOS v7.0, 7.2, 7.4 y 7.6.
Diagnóstico paso a paso
Síntomas:
Se pueden observar los siguientes síntomas que se relacionan con este problema:
-
Se observa un alto uso de CPU en espera de E/S (iowait) en el FortiGate (esto se puede verificar con get system performance stat y diagnose sys mpstat en la CLI).
- Este tipo de uso de CPU se reporta cuando un proceso pasa tiempo inactivo esperando acceder a datos almacenados en el disco o almacenamiento flash (es decir, no necesariamente está realizando una tarea, sino que está esperando los datos necesarios para proceder con su tarea).
Ejemplo:
CPU states: 1% user 0% system 0% nice 35% idle 64% iowait 0% irq 0% softirq
CPU0 states: 3% user 3% system 0% nice 14% idle 79% iowait 0% irq 1% softirq
CPU1 states: 2% user 0% system 0% nice 87% idle 11% iowait 0% irq 0% softirq
CPU2 states: 0% user 0% system 0% nice 25% idle 75% iowait 0% irq 0% softirq
CPU3 states: 0% user 0% system 0% nice 42% idle 58% iowait 0% irq 0% softirq
CPU4 states: 0% user 0% system 0% nice 100% idle 0% iowait 0% irq 0% softirq
CPU5 states: 1% user 1% system 0% nice 1% idle 97% iowait 0% irq 0% softirq
CPU6 states: 2% user 0% system 0% nice 2% idle 96% iowait 0% irq 0% softirq
CPU7 states: 0% user 0% system 0% nice 1% idle 99% iowait 0% irq 0% softirq
-
Los procesos en el FortiGate se muestran como atascados en el estado D (esto se puede observar con diagnose sys top).
- El estado D indica «sueño ininterrumpido», que a menudo se asocia con un proceso que espera que se complete otra llamada al sistema (como una operación de I/O de disco).
- Cualquier proceso podría entrar en el estado D debido a este problema, pero se ha observado que procesos como miglogd, node, httpsd, ipshelper e ipsengine entran en este estado según muestras de solución de problemas anteriores.
Ejemplo:
Run Time: 66 días, 17 horas y 24 minutos
2U, 0N, 1S, 52I, 45WA, 0HI, 0SI, 0ST; 1917T, 91F
flcfgd 237 S 20.1 0.9 7
hasync 203 D < 3.9 1.7 4
[mmcqd/0] 102 SW 2.4 0.0 0
node 14327 D 1.4 4.4 7
ipshelper 200 S < 0.9 2.1 0
[kworker/1:0] 13827 SW 0.9 0.0 1
[kworker/0:2] 6391 SW 0.9 0.0 0
ipsengine 329 D < 0.4 2.5 7
ipsengine 330 D < 0.4 2.4 6
fortilinkd 235 S 0.4 0.7 0
newcli 7423 S 0.4 0.6 2
newcli 7464 R 0.4 0.6 1
cw_acd 232 S 0.0 6.7 4
miglogd 301 S 0.0 6.3 6
cmdbsvr 137 S 0.0 2.8 1
ipsengine 331 D < 0.0 2.4 5
-
El FortiGate reporta bajas cantidades de memoria «libre» (esto se puede observar con get system performance stat | grep Memory y diagnose hardware sysinfo memory).
- El uso de memoria en el FortiGate se divide entre memoria utilizada (es decir, en uso activo por procesos), memoria libre (memoria no utilizada disponible para asignación) y memoria liberable (cualquier memoria que está siendo utilizada pero puede liberarse para usos más importantes, como datos en caché).
- En este caso, se refiere al bajo uso de memoria libre.
Adicionalmente, algunos usuarios han informado de problemas adicionales derivados de los síntomas anteriores:
- Alta latencia/interrupciones en el tráfico del usuario final cuando la inspección de IPS/Control de Aplicaciones está en curso (mientras los procesos ipsengine aparecen en el estado D).
- La GUI web del FortiGate podría ser intermitentemente inaccesible o lenta (mientras los procesos httpsd y/o node están en estado D).
Solución recomendada
Explicación:
Cuando la memoria libre/disponible del FortiGate es baja, se ha observado que datos importantes pueden ser paginados al disco (es decir, no hay suficiente espacio en la memoria para todo lo que se solicita, por lo que se utiliza el disco como espacio de desbordamiento/intercambio).
El problema radica en que estos datos todavía están siendo utilizados por el proceso que los necesita, pero ahora deben ser accedidos desde el almacenamiento en disco, que es significativamente más lento que la memoria del sistema. Mientras el proceso espera acceder a sus datos, se coloca en el estado D para indicar que está esperando que el sistema procese los datos.
Al mismo tiempo, el uso de CPU en iowait aumentará para reflejar el hecho de que los procesos están pasando un tiempo significativo esperando a que se completen las operaciones de E/S antes de poder reanudar su trabajo.
En última instancia, la raíz del problema aquí es la falta de memoria libre. Si la memoria libre disponible en el FortiGate se vuelve demasiado baja, se puede activar este comportamiento de paginación de memoria al disco (lo cual es necesario para evitar que el sistema se bloquee o congele por falta de memoria) y eso puede llevar a los síntomas descritos anteriormente.
Resolución:
Para aclarar, los problemas descritos anteriormente se desencadenan cuando el FortiGate tiene insuficiente memoria libre. Resolver ese problema requeriría aumentar los recursos de memoria del sistema (opción para máquinas virtuales pero no para FortiGates de hardware) o reducir el uso de memoria para permitir más espacio de búfer libre.
Dicho esto, se están realizando mejoras para manejar mejor esta situación. Notablemente, se actualizará el IPS Engine como parte de FortiOS 7.0.16, 7.2.11, 7.4.6 y 7.6.1 para que los datos críticos sean mucho menos propensos a paginarse desde la memoria. Esto ayudará a prevenir que el IPS Engine entre en estado D durante escenarios con limitaciones de memoria y debería reducir o eliminar el impacto en el tráfico de los usuarios cuando el IPS Engine está escaneando tráfico (IPS, Control de Aplicaciones, políticas de inspección basadas en flujo, etc.).
Además, la sugerencia general aquí es intentar reducir el uso de memoria en modelos más pequeños de FortiGate cuando sea posible. Consulte los siguientes artículos de KB para más orientación sobre este asunto:
- Técnica: Modelos de FortiGate de gama baja con RAM ≤ 2GB entran en modo de conservación debido a un aumento en ISDB…
- Técnica: FortiGate entra en modo de conservación durante las actualizaciones de FortiGuard.
¿Te ha resultado útil??
0 / 0

Hola, somos Mila Jiménez y César Sánchez. Dos apasionados de la ciberseguridad con muchos años de experiencia. Hemos trabajado en muchas empresas del mundo TI y ahora nos apetece compartir nuestro conocimiento con cualquiera que lo necesite.
¡Si te gusta nuestro contenido puedes invitarnos a un café AQUÍ!