Silakan pertimbangkan perintah berikut untuk paket imagemagick:
sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg
Sekarang test1.jpg
adalah gambar yang cukup besar (12,5MB), tetapi bukan ukuran yang tidak pernah terdengar, tetapi server tempat saya bekerja hanya memiliki memori 1G ( Amazon EC2 t2.micro jika itu membantu)
Tidak ada kesalahan yang dilemparkan, namun tidak ada test2.jpg
yang sedang dibuat. Saya telah menguji ini dengan gambar yang lebih kecil dan berfungsi dengan baik. Saya akan berpikir 1G jika memori akan banyak untuk mengatur ukuran, tetapi mungkin tidak?
Apa pilihan saya, apakah saya harus mendapatkan lebih banyak memori atau apakah saya kehilangan sesuatu?
Ada saran sangat welcome!
Suntingan yang Diminta
output strace menunjukkan: +++ killed by SIGKILL +++
bersama dengan banyak perintah yang terlihat normal (membuka /usr/share/local
dan membaca string panjang, yang saya asumsikan adalah data gambar)
gratis memberi saya:
total used free shared buffers cached
Mem: 1016292 278348 737944 6412 460 13356
-/+ buffers/cache: 264532 751760
Swap: 0 0 0
Jadi sepertinya swap tidak diaktifkan, jadi saya akan melihat membuat swapfile untuk melihat apakah ini memilah masalah saya.
File memberi saya:
testprint10Mbv2.jpg: JPEG image data, EXIF standard
Saya juga akan menempelkan penuh / path / ke / img tetapi sayangnya itu berisi data sensitif (alamat email klien dll)
sudo
perintah ini?-limit memory 64MiB
(32MiB agak terlalu kecil mungkin. Defaultnya adalah 1.5GiB). Dan itu akan memberi Anda beberapa hasil deskriptif jika gagal.strace
menambahkan di depan perintah, lihat apa panggilan sistem dibuat, kesalahan dilemparkan. Beritahu kamiJawaban:
Saya berasumsi Anda kehabisan RAM. Anda dapat memverifikasi ini dengan
watch cat /proc/meminfo
saat proses Anda sedang berjalan.Anda mungkin memiliki RAM dan / atau SWAP yang tidak mencukupi untuk menyelesaikan tugas Anda.
Karena kondisi ram rendah, pastikan swap diaktifkan
swapon -a
dan jika tidak ada swap diatur pada sistem, buat partisi untuk swap pada ruang disk yang tidak digunakan dan aktifkan. Ini kemungkinan akan memecahkan masalah. Ada jawaban yang bagus dari @Takkat tentang cara melakukannya di sini. Jika Anda tidak memiliki akses untuk mempartisi server, Anda juga dapat menggunakan swapfile untuk swapsumber
Amazon EC2 t2.micro
, saya mengedit pertanyaan untuk memperjelas, menambahkan tag juga agar mudah ditautkan ke pertanyaan terkait lainnya.Masalah dalam pertanyaan diselesaikan dengan menambahkan swap yang sesuai. Untuk kelengkapan, izinkan saya memberikan ringkasan opsi tambahan yang kami miliki saat menjalankan Image Magick
convert
pada file besar pada sistem memori rendah, atau ketika tidak ada swap tersedia, atau swap itu terlalu kecil.Metode yang disebutkan di bawah ini diuraikan secara terperinci dalam manual Image Magick:
Penanganan Gambar Sungguh Masif
Ringkasan:
Batasi penggunaan memori dengan opsi
-limit
Dengan demikian Image Magick akan membuat file sementara untuk penanganan gambar segera setelah batas memori yang diberikan terlampaui. Ini perlu izin tulis untuk Image Magick di direktori file sementara. Kami dapat memberikan jalur apa pun di mana file sementara akan dibuat dalam variabel lingkungan
MAGICK_TMPDIR
. Contoh perintah mungkin terlihat mirip dengan ini:Bekerja pada disk daripada dalam RAM akan memperlambat kecepatan pemrosesan secara signifikan.
Bekerja dengan "File Disk yang Dipetakan Memori"
Membuat file MPC adalah sumber daya yang menuntut tetapi tidak perlu begitu banyak sumber daya untuk mengkonversi dari file MPC. Oleh karena itu dapat dipertimbangkan jika kita perlu mengkonversi sumber yang sama dengan parameter yang berbeda beberapa kali. Alur kerjanya mungkin mirip dengan ini:
Bekerja pada bagian kecil dari suatu gambar menggunakan
stream
Menggunakan aliran mengklaim hanya memproses bagian dari gambar sumber tanpa perlu memuat seluruh gambar ke dalam memori.
Pada contoh di atas
-extract
opsi mengambil ukuran dan nilai offset seperti yang didefinisikan oleh geometri Image Magick . Kita harus menyatukan kembali ubin untuk mendapatkan gambar berskala secara keseluruhan. Sayangnya streaming tidak berfungsi untuk semua format gambar tetapi seharusnya berfungsi dengan baik pada gambar JPEG.sumber