13 votos

ImageMagick convertir y poca memoria RAM

Por favor, considere el siguiente comando para el paquete imagemagick:

sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg

Ahora test1.jpg es una bastante grande de la imagen (12.5 MB), pero no insólito de tamaños, pero el servidor en el que estoy trabajando desde sólo tiene 1G de memoria (Amazon EC2 t2.micro si ayuda)

Ningún error es de ser lanzado, y sin embargo no test2.jpg está siendo creado. He probado esto con imágenes más pequeñas y funciona bien. Yo habría pensado 1G si la memoria no sería suficiente para gestionar un cambio de tamaño, pero tal vez no?

¿Cuáles son mis opciones, ¿debo tener más memoria o me estoy perdiendo algo?

Cualquier sugerencia será muy bienvenida!

Solicitado Ediciones

strace de salida de la muestra: +++ killed by SIGKILL +++ junto con un montón de comandos que se ven normales (apertura /usr/share/local y la lectura de cadenas largas, que supongo que es los datos de la imagen)

libre me da:

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

Así que parece como si el swap no está habilitado, así que voy a mirar en la creación de un archivo de intercambio para ver si este tipo a mis problemas.

Archivo me da:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

También me gustaría pegar el full /ruta/a/img pero, por desgracia no contiene datos sensibles (cliente de correo electrónico, dirección, etc.)

7voto

Elder Geek Puntos 6273

Estoy asumiendo que usted está ejecutando fuera de la RAM. Usted puede verificar esto con watch cat /proc/meminfo , mientras que su proceso está en ejecución.

Usted puede tener RAM insuficiente y/o de INTERCAMBIO para realizar su tarea.

Debido a la baja de ram condición, asegúrese de que el intercambio con swapon -a y si no hay intercambio en el programa de instalación en el sistema de crear una partición para swap sin utilizar espacio en disco y activarlo. Esto probablemente va a resolver el problema. Hay una buena respuesta por parte de @Takkat sobre cómo hacerlo aquí Si usted no tiene acceso a la creación de particiones en el servidor también puede utilizar un archivo de intercambio swap

6voto

Mike L Puntos 239

El problema en la cuestión fue resuelta por la adición apropiada de intercambio. Para la integridad permítanme darles un resumen de las opciones adicionales que se tiene cuando se ejecuta Image Magick convert en los grandes archivos en sistemas con poca memoria, o cuando no hay intercambio, o el intercambio era demasiado pequeño.

Los métodos mencionados a continuación se exponen en detalle en la Imagen Magia manual:

Realmente Masiva De La Imagen De Manejo


Resumen:

  1. Limitar el uso de memoria con la opción -limit

    Haciendo así que la Imagen de Magia va a crear un archivo temporal para el manejo de la imagen tan pronto como la memoria de los límites que se han superado. Esto necesita permiso de escritura para la Imagen de la Magia en el directorio de archivos temporales. Podemos darle la ruta donde el archivo temporal que se crea en una variable de entorno MAGICK_TMPDIR. Un ejemplo de comando puede ser similar a esto:

        env MAGICK_TMPDIR=/tempdir nice -5 convert -limit memory 32 -limit map 32 largefile.jpg -resize 640x320 smallfile.png
    

    Trabajando en el disco en lugar de en la memoria RAM se ralentizará la velocidad de procesamiento considerablemente.

  2. Trabajo con "la Memoria Asignada a los Archivos del Disco"

    La creación de archivos MPC es un recurso exigente, pero que no necesita tantos recursos para convertir de archivos MPC. Por lo tanto se puede poner en consideración en caso de que necesitemos convertir a la misma fuente con diferentes parámetros varias veces. El flujo de trabajo pueden entonces ser similar a esto:

    convert huge.jpg huge.mpc
    convert huge.mpc -resize 50% big.png
    convert huge.mpc -resize 20% small.png
    convert huge.mpc -resize 5% thumb.png
    
  3. Trabajar en pequeñas secciones de una imagen usando stream

    El uso corriente de las reclamaciones al proceso de solo una parte de la imagen de origen sin la necesidad de cargar toda la imagen en la memoria.

    stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
    

    En el ejemplo de arriba el -extract opción tiene el tamaño y desplazamiento de valores definidos por la Imagen de la Magia de la geometría. Vamos a tener que pegar los azulejos de nuevo juntos para conseguir la ampliación de la imagen como un todo. Por desgracia corriente no funciona para todos los formatos de imagen, pero se supone que funciona bien en imágenes JPEG.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X