Bitte beachten Sie den folgenden Befehl für das imagemagick-Paket:
sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg
Jetzt test1.jpg
ist ein ziemlich großes Image (12,5 MB), aber es ist nicht unerhört groß, aber der Server, auf dem ich arbeite, hat nur 1 GB Speicher ( Amazon EC2 t2.micro, wenn es hilft)
Es wird kein Fehler ausgegeben, und es wird noch kein Fehler test2.jpg
erstellt. Ich habe dies mit kleineren Bildern getestet und es funktioniert gut. Ich hätte gedacht, 1G, wenn Speicher genug wäre, um eine Größenänderung zu verwalten, aber vielleicht nicht?
Welche Möglichkeiten habe ich, muss ich mehr Speicher bekommen oder vermisse ich etwas?
Anregungen sind sehr willkommen!
Angeforderte Änderungen
Die Ausgabe von strace zeigt: +++ killed by SIGKILL +++
zusammen mit vielen Befehlen, die normal aussehen (Öffnen /usr/share/local
und Lesen langer Zeichenfolgen, von denen ich annehme , dass es sich um Bilddaten handelt)
kostenlos gibt mir:
total used free shared buffers cached
Mem: 1016292 278348 737944 6412 460 13356
-/+ buffers/cache: 264532 751760
Swap: 0 0 0
Es sieht also so aus, als ob Swap nicht aktiviert ist. Daher werde ich versuchen, eine Swap-Datei zu erstellen, um festzustellen, ob dies meine Probleme löst.
Datei gibt mir:
testprint10Mbv2.jpg: JPEG image data, EXIF standard
Ich würde auch das vollständige / path / to / img einfügen, aber leider enthält es vertrauliche Daten (Client-E-Mail-Adressen usw.)
sudo
diesen Befehl?-limit memory 64MiB
(32 MB sind wahrscheinlich ein bisschen zu klein. Standard ist 1,5 GB). Und es sollte Ihnen eine beschreibende Ausgabe geben, falls es fehlschlägt.strace
angehängtem Text vor dem Befehl auszuführen, und überprüfen Sie, welche Systemaufrufe und Fehler ausgegeben werden. Lassen Sie es uns wissenAntworten:
Ich gehe davon aus, dass Ihnen der Arbeitsspeicher ausgeht. Sie können dies überprüfen,
watch cat /proc/meminfo
während Ihr Prozess ausgeführt wird.Möglicherweise verfügen Sie nicht über genügend RAM und / oder SWAP, um Ihre Aufgabe auszuführen.
swapon -a
Stellen Sie aufgrund des Zustands mit niedrigem Arbeitsspeicher sicher , dass Swap aktiviert ist. Wenn auf dem System kein Swap eingerichtet ist, erstellen Sie eine Partition für Swap auf nicht verwendetem Speicherplatz und aktivieren Sie sie. Dies wird wahrscheinlich das Problem lösen. Es gibt eine gute Antwort von @Takkat, wie man das hier macht. Wenn Sie keinen Zugriff auf die Partitionierung des Servers haben, können Sie auch eine Swap-Datei für den Swap verwendenquelle
Amazon EC2 t2.micro
, ich habe Frage bearbeitet, um klar zu machen, Tag hinzugefügt, um einfach mit anderen verwandten Fragen verknüpft zu werden.Das Problem in der Frage wurde durch Hinzufügen eines geeigneten Swap behoben. Der Vollständigkeit halber möchte ich eine Zusammenfassung der zusätzlichen Optionen geben, die wir haben, wenn Image Magick
convert
für große Dateien auf Systemen mit geringem Arbeitsspeicher ausgeführt wird oder wenn kein Swap verfügbar ist oder der Swap zu klein war.Die im Folgenden genannten Methoden werden im Image Magick-Handbuch ausführlich erläutert:
Wirklich massive Bildverarbeitung
Zusammenfassung:
Begrenzen Sie die Speichernutzung mit der Option
-limit
Auf diese Weise erstellt Image Magick eine temporäre Datei für die Bildbearbeitung, sobald die angegebenen Speichergrenzen überschritten wurden. Dies erfordert Schreibrechte für Image Magick im temporären Dateiverzeichnis. Wir können einen beliebigen Pfad angeben, in dem die temporäre Datei in einer Umgebungsvariablen erstellt wird
MAGICK_TMPDIR
. Ein Beispielbefehl könnte ungefähr so aussehen:Wenn Sie nicht im RAM, sondern auf der Festplatte arbeiten, wird die Verarbeitungsgeschwindigkeit erheblich verlangsamt.
Arbeiten mit "Memory Mapped Disk Files"
Das Erstellen von MPC-Dateien ist ressourcenintensiv, erfordert jedoch nicht so viele Ressourcen zum Konvertieren von MPC-Dateien. Daher kann dies in Betracht gezogen werden, wenn dieselbe Quelle mehrmals mit unterschiedlichen Parametern konvertiert werden muss. Der Workflow könnte dann ungefähr so aussehen:
Bearbeiten Sie kleine Bildausschnitte mit
stream
Durch die Verwendung von Stream- Ansprüchen wird nur ein Teil des Quellbilds verarbeitet, ohne dass das gesamte Bild in den Speicher geladen werden muss.
Im obigen Beispiel werden für die
-extract
Option Größen- und Versatzwerte verwendet, die in der Image Magick- Geometrie definiert sind . Wir müssen die Kacheln wieder zusammenkleben, um das skalierte Bild als Ganzes zu erhalten. Leider funktioniert der Stream nicht für alle Bildformate, sollte aber bei JPEG-Bildern einwandfrei funktionieren.quelle