2012-01-02 18 views
7

Básicamente estoy tratando de mantener el uso de la memoria en mi servidor Nginx por una cierta cantidad, tanto porque estoy loco (de acuerdo con mis amigos) & Quiero ahorrar dinero. Sin embargo, me preocupa que ImageMagick pueda llevarlo al límite.Limitar la memoria de ImageMagick Usar

estoy usando -limit area 20MiB y también he intentado -limit memory 15MiB -limit map 15MiB pero al comprobar el proceso (ya que se ejecuta) a través de top -c (with Shift-M) y ps aux lo muestra utilizando, a veces, considerablemente más memoria que me he fijado en los límites. Para dar números, puede usar 35MB o 40MB, en lugar de los 20MB/30MB que esperaría. No me molestarían con 2MB o 3MB, pero eso es una compensación bastante grande.

Me han dicho que la memoria extra puede ser la sobrecarga de ImageMagick, ya que carga el intérprete, etc., pero no estoy muy familiarizado con los programas de Unix, así que no tengo ni idea en ese departamento.

Si alguien puede explicar por qué sucede esto, sería genial. Si es algo normal, genial. Simplemente ajustaré las cosas para tener en cuenta el hecho de que puede usar mi límite más cierta cantidad, pero si no lo es y el parámetro -limit no limita la memoria a una cierta cantidad, ¿cuál es exactamente el sentido de tener ese parámetro en ImageMagick?

Nuevamente gracias por su ayuda con anticipación, es muy apreciada, como siempre.

+0

No hay ideas a nadie? No es un problema importante, pero me encantaría que alguien pueda arrojar algo de luz sobre esto. – Vunus

Respuesta

2

Según la documentación de ImageMagick está moviendo todas las operaciones de memoria a mmaped archivos, por lo que empieza a cambiar si usted tiene suficiente espacio en disco, consulte el manual: SNIP del manual de -limit:

El el valor de File está en cantidad de archivos. El límite de disco está en Gigabutes y los valores para los otros recursos están en megabytes. Por predeterminado, los límites son 768 archivos, 1024 MB de memoria, 4096 MB de mapa y disco ilimitado, pero estos se ajustan en el momento del inicio en las plataformas que pueden proporcionar información sobre los recursos disponibles. Cuando se alcanza el límite , ImageMagick fallará de alguna manera, o tomará acciones de compensación si es posible. Por ejemplo, -limit memory 32 -limit map 64 límites de memoria Cuando el caché de píxeles alcanza el límite de memoria, utiliza la asignación de memoria. Cuando se alcanza ese límite, va al disco. Si el disco tiene un límite estricto, el programa fallará.

+0

Definitivamente tengo suficiente espacio en el disco (más de 50GB) pero parece que todavía está usando más de la cantidad establecida a través del parámetro -limit. Perdón por la gran tardanza en comentar también, había olvidado que había hecho la pregunta, ya que ImageMagick parece comportarse a pesar de que esto sigue siendo un problema. – Vunus

+0

Intente instalarlo desde svn, ¿quizás su versión tiene errores? – Arman

+0

Creo que estaba relacionado con el sistema que mi host estaba usando. Desde entonces me he mudado a un host diferente donde puedo instalar ImageMagik y he estado trabajando sin problemas desde entonces. – Vunus

2

Los límites solo afectan al caché de píxeles de ImageMagick. El código del programa y todo lo que las bibliotecas/delegados pueden hacer para cargar o procesar las imágenes no se ven afectados por estas configuraciones.

No especifica lo que está mirando en la parte superior, la columna correcta sería RES o RSIZE. Con límites tan pequeños como 20MiB, el programa y el código de la biblioteca representarán una fracción significativa del tamaño del conjunto residente.

Para verificar que está utilizando las unidades correctas para las variables de entorno, use identify -list resource. Si el tamaño de la memoria caché de píxeles de memoria (MAGICK_MEMORY_LIMIT) es insuficiente para una imagen, se utilizará un archivo mmap-ed (MAGICK_MAP_LIMIT) y si ese límite es demasiado bajo, se utilizará un archivo de disco convencional (MAGICK_DISK_LIMIT). Si todos los límites son demasiado bajos, ImageMagick fallará inmediatamente con un error como cache resources exhausted, Memory allocation failed o corrupt image.

+0

Por lo tanto, la memoria adicional utilizada podría ser la propia biblioteca cargada en la memoria, ¿sería más o menos 10 MB extra? Estoy buscando en RES, por lo general, supera 8-10 MB extra por encima de mi límite establecido, así que acabo de asumir que es la sobrecarga del programa y he ajustado la memoria de mi servidor para acomodarlo. Gracias por la respuesta. – Vunus

Cuestiones relacionadas