Veuillez considérer la commande suivante pour le package imagemagick:
sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg
Maintenant, test1.jpg
c'est une image assez grande (12,5 Mo), mais pas des tailles inconnues, mais le serveur sur lequel je travaille n'a que 1 Go de mémoire ( Amazon EC2 t2.micro si cela aide)
Aucune erreur n'est lancée, et pourtant aucune test2.jpg
n'est créée. J'ai testé cela avec des images plus petites et cela fonctionne très bien. J'aurais pensé 1G si la mémoire était suffisante pour gérer un redimensionnement, mais peut-être pas?
Quelles sont mes options, dois-je avoir plus de mémoire ou manque-t-il quelque chose?
Toute suggestion est la bienvenue!
Modifications demandées
la sortie de strace montre: +++ killed by SIGKILL +++
avec beaucoup de commandes qui semblent normales (ouverture /usr/share/local
et lecture de longues chaînes, qui je suppose sont des données d'image)
gratuit me donne:
total used free shared buffers cached
Mem: 1016292 278348 737944 6412 460 13356
-/+ buffers/cache: 264532 751760
Swap: 0 0 0
Il semble donc que l'échange ne soit pas activé, je vais donc chercher à créer un fichier d'échange pour voir si cela trie mes problèmes.
Le fichier me donne:
testprint10Mbv2.jpg: JPEG image data, EXIF standard
Je collerais également le / path / to / img complet mais malheureusement il contient des données sensibles (adresses e-mail des clients, etc.)
sudo
cette commande?-limit memory 64MiB
(32 Mo est probablement un peu trop petit. La valeur par défaut est 1,5 Go). Et cela devrait vous donner une sortie descriptive en cas d'échec.strace
annexe devant la commande, voyez quels appels système sont effectués, erreurs levées. Faites-nous savoirRéponses:
Je suppose que vous manquez de RAM. Vous pouvez vérifier cela avec
watch cat /proc/meminfo
pendant que votre processus est en cours d'exécution.Vous n'avez peut-être pas suffisamment de RAM et / ou de SWAP pour accomplir votre tâche.
En raison de la condition de faible ram, assurez-vous que le swap est
swapon -a
activé et si aucun swap n'est configuré sur le système, créez une partition pour le swap sur l'espace disque inutilisé et activez-le. Cela résoudra probablement le problème. Il y a une bonne réponse de @Takkat sur la façon de le faire ici Si vous n'avez pas accès au partitionnement du serveur, vous pouvez également utiliser un fichier d'échange pour l'échangela source
Amazon EC2 t2.micro
, j'ai édité la question pour la clarifier, j'ai ajouté une balise pour être facilement liée à d'autres questions connexes.Le problème dans la question a été résolu en ajoutant le swap approprié. Pour être complet, permettez-moi de résumer les options supplémentaires que nous avons lors de l'exécution d'Image Magick
convert
sur des fichiers volumineux sur des systèmes à faible mémoire, ou lorsqu'il n'y a pas d'échange disponible, ou que l'échange était trop petit.Les méthodes mentionnées ci-dessous sont développées en détail dans le manuel Image Magick:
Gestion d'image vraiment massive
Sommaire:
Limitez l'utilisation de la mémoire avec l'option
-limit
Ce faisant, Image Magick créera un fichier temporaire pour la gestion des images dès que les limites de mémoire données auront été dépassées. Cela nécessite une autorisation d'écriture pour Image Magick dans le répertoire de fichiers temporaires. Nous pouvons donner n'importe quel chemin où le fichier temporaire sera créé dans une variable d'environnement
MAGICK_TMPDIR
. Un exemple de commande peut ressembler à ceci:Travailler sur disque plutôt qu'en RAM ralentira considérablement la vitesse de traitement.
Travailler avec "Fichiers de disque mappés en mémoire"
La création de fichiers MPC demande des ressources mais ne nécessite pas autant de ressources pour convertir à partir de fichiers MPC. Par conséquent, cela peut être pris en considération au cas où nous aurions besoin de convertir plusieurs fois la même source avec différents paramètres. Le flux de travail peut alors être similaire à ceci:
Travailler sur de petites sections d'une image en utilisant
stream
L'utilisation de revendications de flux pour traiter uniquement une partie de l'image source sans avoir besoin de charger toute l'image en mémoire.
Dans l'exemple ci-dessus, l'
-extract
option prend les valeurs de taille et de décalage définies par la géométrie Image Magick . Nous devrons coller les tuiles ensemble pour obtenir l'image à l'échelle dans son ensemble. Malheureusement, le flux ne fonctionne pas pour tous les formats d'image mais est censé fonctionner correctement sur les images JPEG.la source