Pertanyaan ImageMagick mengkonversi dan RAM rendah


Silakan perhatikan perintah berikut untuk paket imagemagick:

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

Sekarang test1.jpg adalah adil gambar besar (12,5MB), tetapi tidak pernah terdengar ukurannya, tetapi server tempat saya bekerja hanya memiliki 1G memori (Amazon EC2  t2.micro jika itu membantu)

Tidak ada kesalahan yang dilempar, namun tidak test2.jpg sedang dibuat. Saya telah menguji ini dengan gambar yang lebih kecil dan itu berfungsi dengan baik. Saya akan berpikir 1G jika memori akan banyak untuk mengatur ukuran, tapi mungkin tidak?

Apa saja pilihan saya, apakah saya harus mendapat lebih banyak memori atau kehilangan sesuatu?

Ada saran yang sangat diterima!

Pengeditan yang Diminta

keluaran strace menunjukkan: +++ killed by SIGKILL +++ bersama banyak perintah yang terlihat normal (pembukaan /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 mencari cara membuat swapfile untuk melihat apakah masalah saya seperti ini.

File memberi saya:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

Saya juga akan menempel penuh / path / ke / img tapi sayangnya itu berisi data sensitif (alamat email klien dll)


11
2018-01-22 16:57


asal


Mengapa kamu menggunakan sudo dalam perintah ini? - Charles Green
Menerima pesan "Tewas" ketika saya tidak - Aphire
Ypu dapat mencoba membatasi memori yang digunakan untuk cache piksel dengan argumen -limit memory 64MiB (32MiB agak terlalu kecil mungkin. Default-nya 1.5GiB). Dan seharusnya memberi Anda beberapa output deskriptif jika gagal. - dadexix86
Coba jalankan perintah dengan strace ditambahkan di depan perintah, lihat panggilan sistem apa yang dibuat, kesalahan dilempar. Beritahu kami - Sergiy Kolodyazhnyy
Selesai Aku senang kamu berhasil menyelesaikannya! output gratis menegaskan bahwa swap tidak aktif dan info file menegaskan bahwa itu bukan file yang salah diidentifikasi. Edit bagus! +1 - Elder Geek


Jawaban:


Saya berasumsi Anda kehabisan RAM. Anda dapat memverifikasi ini dengan watch cat /proc/meminfo saat proses Anda berjalan.

Anda mungkin tidak memiliki RAM dan / atau SWAP yang cukup untuk menyelesaikan tugas Anda.

Karena kondisi rendah ram, pastikan bahwa swap sudah berjalan swapon -a dan jika tidak ada pengaturan swap pada sistem, buatlah 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 sini Jika Anda tidak memiliki akses untuk mempartisi server, Anda juga dapat menggunakan swapfile untuk swap 


7
2018-01-26 19:08



OP adalah tentang server cloud, membuat partisi swap mungkin bukan pilihan. Anda dapat menambahkan Bagaimana cara menambahkan file swap baru terlalu. - user.dz
@Sneetsher Itulah yang saya lakukan, komentar yang bagus - Aphire
@Sneetsher "OP adalah tentang server cloud" tidak jelas (setidaknya untuk saya) dari data dalam pertanyaan tetapi Anda membuat titik yang bagus. jawaban penyuntingan. - Elder Geek
@ElderGeek, sebenarnya itu tetapi tidak disorot dengan baik Amazon EC2 t2.micro Saya mengedit pertanyaan untuk membuat jelas, menambahkan tag juga agar mudah dihubungkan dengan pertanyaan terkait lainnya. - user.dz
@Sneetsher Saya melihat itu sekarang. Terima kasih untuk usaha Anda! - Elder Geek


Masalah dalam pertanyaan itu 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 terlalu kecil.

Metode yang disebutkan di bawah ini diuraikan secara terperinci dalam manual Gambar Magick:

Penanganan Gambar Sangat Besar


Ringkasan:

  1. Batasi penggunaan memori dengan opsi -limit

    Dengan melakukan itu, Image Magick akan membuat file sementara untuk penanganan gambar segera setelah batas memori yang diberikan terlampaui. Ini perlu izin menulis untuk Image Magick pada direktori file sementara. Kami dapat memberikan jalur mana file sementara akan dibuat dalam variabel lingkungan MAGICK_TMPDIR. Perintah contoh 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 di RAM akan memperlambat kecepatan pemrosesan.

  2. Bekerja dengan "Memory Mapped Disk Files"

    Membuat file MPC membutuhkan banyak sumber daya tetapi tidak membutuhkan 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 kerja mungkin serupa 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-bagian kecil dari suatu gambar menggunakan stream

    Menggunakan aliran klaim 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
    

    Dalam contoh di atas -extract opsi mengambil ukuran dan mengimbangi nilai seperti yang didefinisikan oleh Image Magick geometri. Kami harus menempelkan ubin kembali bersama untuk mendapatkan gambar berskala secara keseluruhan. Sayangnya aliran tidak berfungsi untuk semua format gambar tetapi seharusnya berfungsi dengan baik pada gambar JPEG.


4
2018-01-28 18:54