uso servidor por optimizar mucha monitorear memoria liberar datos consumo consume cantidad alto memory haskell ghc

memory - servidor - sql server consume mucha memoria



Cómo limitar el uso de memoria de los hilos Haskell (3)

En un programa Haskell compilado con GHC, ¿es posible protegerse programáticamente del uso excesivo de memoria? Es decir, debe notificar al programa cuando el uso de memoria alcanza un límite especificado, preferiblemente indicando el hilo ofensivo.

Por ejemplo, supongamos que quiero escribir un servidor, que aloje un intérprete de lenguaje de scripting, con el que los usuarios puedan conectarse. Es Turing-completo, por lo que los programas teóricamente podrían usar memoria ilimitada o tiempo. Supongamos que cada cliente se maneja con un hilo separado. Si un cliente escribe un bucle infinito que consume memoria muy rápidamente, quiero asegurarme de que el hilo no consuma más de, digamos, 1 MB de memoria, antes de recibir una alerta con una excepción. No quiero que otros usuarios se vean afectados cuando eso suceda.

Esto probablemente sea posible usando procesos separados y ulimit , pero:

  • Preferiría mantenerlo en un programa, para evitar la complejidad de la comunicación entre procesos.

  • Necesito admitir tanto Linux como Windows, por lo que preferiría mantenerlo independiente de la plataforma si es posible.


Edward Z. Yang y David Mazières han desarrollado una extensión para GHC que admite límites de recursos dinámicos y la discuten en http://ezyang.com/rlimits.html También proporcionan una versión de GHC 7.8 que lo admite.

Desafortunadamente, su trabajo no fue incluido en GHC upstream.


En su ejemplo, es posible que deba modificar la fuente del intérprete de lenguaje de scripting, realice algunos giros en la memoria mgmt. módulo (s), por supuesto SI tiene algunas características de asignación de memoria administrada, el intérprete puede quejarse de un uso excesivo de la cuota de memoria por una devolución de llamada API a su aplicación de host.


Puede que no sea exactamente lo que quieres Pero, como se documenta aquí , tiene una opción de compilación ghc: -Ksize , update: Oops, lo siento, -K es por desbordamientos de pila. Aún así, puedes verificar ese enlace.