ImageMagick конвертувати і низька оперативна пам'ять


12

Будь ласка, врахуйте таку команду для пакету imagemagick:

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

Зараз test1.jpgце досить велике зображення (12.5MB), але не нечуване розмірів, але сервер я працюю з має тільки 1G пам'яті ( Amazon EC2 t2.micro , якщо це допомагає)

Жодна помилка не кидається, і поки test2.jpgвона не створюється. Я перевірив це з меншими зображеннями, і це чудово працює. Я б подумав, що 1G, якщо пам'яті буде достатньо для управління розміром, але, можливо, ні?

Які мої варіанти, чи потрібно отримати більше пам'яті чи мені щось не вистачає?

Будь-які пропозиції дуже вітаються!

Запитані правки

Виведення страйків показує: +++ killed by SIGKILL +++поряд з безліччю команд, які виглядають нормально (відкриття /usr/share/localта читання довгих рядків, на які я припускаю, це дані зображення)

безкоштовно дає мені:

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

Таким чином, схоже, що підкачка не ввімкнена, тому я буду вивчати створення свопфайлу, щоб побачити, чи це впорядковує мої проблеми.

Файл дає мені:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

Я б також вставив full / path / to / img, але, на жаль, він містить конфіденційні дані (адреси електронної пошти клієнта тощо)


1
Для чого ви використовуєте sudoв цій команді?
Чарльз Грін

1
Отримане повідомлення "Вбито", коли я цього не зробив
Апфір

3
Ypu може спробувати обмежити пам'ять, яка використовується для кеш-пікселя, аргументом -limit memory 64MiB(32MiB, мабуть, занадто мало. За замовчуванням 1,5GiB). І він повинен дати вам деякий описовий результат у випадку його відмови.
dadexix86

2
Спробуйте запустити команду, straceдодану перед командою, подивитися, які системні дзвінки робляться, помилки викинуті. Повідомте нас
Сергій Колодяжний,

2
Зроблено. Я радий, що ти це вирішив! вільний вихід підтверджує, що своп вимкнено, а інформація про файл підтверджує, що це невірно визначений файл. Приємна редакція! +1
Старійшина Гік

Відповіді:


7

Я припускаю, що у вас закінчилася оперативна пам’ять. Ви можете це підтвердити, watch cat /proc/meminfoпоки ваш процес працює.

У вас може бути недостатньо оперативної пам’яті та / або SWAP для виконання вашого завдання.

У зв'язку з низьким рівнем оперативної пам’яті, переконайтеся, що заміну ввімкнено, swapon -aа якщо в системі не встановлено жодного замінника, створіть розділ для заміни на невикористаному диску і ввімкніть його. Це, ймовірно, вирішить проблему. @Takkat є гарною відповіддю про те, як це зробити тут. Якщо у вас немає доступу до розділу сервера, ви також можете використовувати свопфайл для swap.


1
OP - це хмарний сервер, створити розділ swap, можливо, не є варіантом. Ви можете додати як додавати новий файл swap .
user.dz

@Sneetsher Це саме те, що я зробив, хороший коментар
Апфір

@Sneetsher "ОП - це хмарний сервер", не було зрозуміло (принаймні для мене) з даних у запитанні, але ви добре зазначаєте. редагування відповіді.
Старійшина Гік

@ElderGeek, насправді це, але недостатньо добре виділено Amazon EC2 t2.micro, я відредагував питання, щоб зробити зрозумілим, додавши тег, щоб його легко було пов'язати з іншими пов'язаними питаннями.
user.dz

@Sneetsher Я це бачу зараз. Дякую за ваші зусилля!
Старійшина Гейк

5

Питання у питанні було вирішено шляхом додавання відповідного свопу. Для повноти дозвольте навести короткий зміст додаткових опцій, які ми маємо під час запуску Image Magick convertна величезних файлах у системах з низькою пам’яттю, або коли немає підкачки, або підміна була занадто малою.

Методи, згадані нижче, детально розроблені в посібнику з зображення Magick:

Дійсно масивна обробка зображення


Підсумок:

  1. Обмежити використання пам'яті за допомогою параметра -limit

    Тим самим Image Magick створить тимчасовий файл для обробки зображень, як тільки будуть перевищені задані межі пам'яті. Для цього потрібен дозвіл на написання Image Magick у тимчасовій директорії файлів. Ми можемо дати будь-який шлях, де тимчасовий файл буде створений у змінній середовища MAGICK_TMPDIR. Приклад команди може виглядати приблизно так:

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

    Робота на диску, а не в оперативній пам'яті значно уповільнить швидкість обробки.

  2. Робота з "Файлами дискових карт"

    Створення MPC-файлів вимагає ресурсів, але для перетворення з MPC-файлів не потрібно стільки ресурсів. Тому може бути враховано, якщо нам потрібно кілька разів перетворити одне і те ж джерело з різними параметрами. Тоді робочий процес може бути подібним до цього:

    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. Робота над невеликими ділянками зображення за допомогою stream

    Використання потокових заявок обробляє лише частину вихідного зображення без необхідності завантажувати все зображення в пам'ять.

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

    У наведеному вище прикладі -extractопція приймає значення розміру та зміщення, як визначено геометрією Image Magick . Нам доведеться склеїти плитки назад, щоб отримати масштабоване зображення в цілому. На жаль, потік працює не для всіх форматів зображень, але, як передбачається, працює добре на зображеннях JPEG.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.