Konversi ImageMagick dan RAM rendah

12

Silakan pertimbangkan perintah berikut untuk paket imagemagick:

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

Sekarang test1.jpgadalah 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.jpgyang 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/localdan 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)

Aphire
sumber
1
Mengapa Anda menggunakan sudoperintah ini?
Charles Green
1
Menerima pesan "Dibunuh" ketika saya tidak
Aphire
3
Ypu dapat mencoba membatasi memori yang digunakan untuk cache pixel dengan argumen -limit memory 64MiB(32MiB agak terlalu kecil mungkin. Defaultnya adalah 1.5GiB). Dan itu akan memberi Anda beberapa hasil deskriptif jika gagal.
dadexix86
2
Coba jalankan perintah dengan stracemenambahkan di depan perintah, lihat apa panggilan sistem dibuat, kesalahan dilemparkan. Beritahu kami
Sergiy Kolodyazhnyy
2
Selesai Saya senang Anda menyelesaikannya! output gratis mengonfirmasi bahwa swap tidak aktif dan info file mengonfirmasi bahwa itu bukan file yang salah diidentifikasi. Suntingan yang bagus! +1
Penatua Geek

Jawaban:

7

Saya berasumsi Anda kehabisan RAM. Anda dapat memverifikasi ini dengan watch cat /proc/meminfosaat 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 -adan 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 swap

Penatua Geek
sumber
1
OP adalah tentang server cloud, membuat partisi swap mungkin bukan opsi. Anda dapat menambahkan Cara menambahkan file swap baru juga.
user.dz
@Sneetsher Thats persis apa yang saya lakukan, komentar yang baik
Aphire
@Sneetsher "OP adalah tentang server cloud" tidak jelas (setidaknya bagi saya) dari data dalam pertanyaan tetapi Anda membuat poin yang bagus. mengedit jawaban.
Penatua Geek
@ElderGeek, sebenarnya itu tetapi tidak disorot dengan baik Amazon EC2 t2.micro, saya mengedit pertanyaan untuk memperjelas, menambahkan tag juga agar mudah ditautkan ke pertanyaan terkait lainnya.
user.dz
@Sneetsher saya melihat itu sekarang. Terima kasih untuk usaha Anda!
Penatua Geek
5

Masalah dalam pertanyaan diselesaikan dengan menambahkan swap yang sesuai. Untuk kelengkapan, izinkan saya memberikan ringkasan opsi tambahan yang kami miliki saat menjalankan Image Magick convertpada 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:

  1. 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:

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

    Bekerja pada disk daripada dalam RAM akan memperlambat kecepatan pemrosesan secara signifikan.

  2. 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:

    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. 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.

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

    Pada contoh di atas -extractopsi 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.

Takkat
sumber