ImageMagick แปลงและ RAM ต่ำ


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 ถ้าหน่วยความจำจะมีขนาดใหญ่พอที่จะจัดการปรับขนาด แต่อาจจะไม่

ตัวเลือกของฉันคืออะไรฉันต้องเพิ่มหน่วยความจำหรือฉันทำอะไรหายไป?

ข้อเสนอแนะใด ๆ ยินดีต้อนรับมาก!

การแก้ไขที่ร้องขอ

เอาต์พุต strace แสดง: +++ 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

ดังนั้นดูเหมือนว่าไม่ได้เปิดใช้งานการสลับดังนั้นฉันจะตรวจสอบการสร้าง swapfile เพื่อดูว่าปัญหาของฉันเรียงลำดับหรือไม่

ไฟล์ให้ฉัน:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

ฉันจะวางแบบเต็ม / path / to / img แต่น่าเสียดายที่มันมีข้อมูลที่ละเอียดอ่อน (ที่อยู่อีเมลของลูกค้า ฯลฯ )


1
ทำไมคุณถึงใช้sudoคำสั่งนี้?
ชาร์ลส์กรี

1
ได้รับข้อความ "ฆ่า" เมื่อฉันไม่ได้
Aphire

3
Ypu สามารถลอง จำกัด หน่วยความจำที่ใช้สำหรับแคชพิกเซลด้วยอาร์กิวเมนต์-limit memory 64MiB(32MiB อาจจะเล็กไปหน่อยค่าเริ่มต้นคือ 1.5GiB) และควรให้ผลลัพธ์ที่เป็นคำอธิบายในกรณีที่มันล้มเหลว
dadexix86

2
ลองเรียกใช้คำสั่งโดยstraceต่อท้ายคำสั่งดูว่ามีการเรียกระบบอะไรเกิดข้อผิดพลาด แจ้งให้เราทราบ
Sergiy Kolodyazhnyy

2
เสร็จสิ้น ฉันดีใจที่คุณได้รับการแก้ไข! เอาต์พุตฟรียืนยันว่า swap ถูกปิดและข้อมูลไฟล์ยืนยันว่าไม่ใช่ไฟล์ที่ระบุผิด แก้ไขได้ดี! +1
ผู้สูงอายุ Geek

คำตอบ:


7

ฉันสมมติว่าคุณใช้ RAM หมด คุณสามารถตรวจสอบสิ่งนี้ได้watch cat /proc/meminfoในขณะที่กระบวนการกำลังทำงาน

คุณอาจมี RAM และ / หรือ SWAP ไม่เพียงพอที่จะทำงานของคุณให้สำเร็จ

เนื่องจากสภาพแรมต่ำให้แน่ใจว่ามีการสลับกับswapon -aและหากไม่มีการตั้งค่าการสลับในระบบสร้างพาร์ติชันสำหรับการแลกเปลี่ยนในพื้นที่ว่างที่ไม่ได้ใช้และเปิดใช้งาน การทำเช่นนี้จะช่วยแก้ปัญหาได้ มีคำตอบที่ดีโดย @Takkat เกี่ยวกับวิธีการทำเช่นนี้ที่นี่หากคุณไม่มีสิทธิ์ในการแบ่งพาร์ติชันเซิร์ฟเวอร์คุณสามารถใช้swapfile เพื่อแลกเปลี่ยน


1
OP เป็นเรื่องเกี่ยวกับคลาวด์เซิร์ฟเวอร์การสร้างพาร์ทิชัน swap อาจไม่ใช่ตัวเลือก คุณสามารถเพิ่มวิธีเพิ่มไฟล์ swap ใหม่ได้เช่นกัน
user.dz

@Sneetsher นั่นคือสิ่งที่ฉันทำความคิดเห็นที่ดี
Aphire

@Sneetsher "OP เป็นเรื่องเกี่ยวกับเซิร์ฟเวอร์คลาวด์" ไม่ชัดเจน (อย่างน้อยสำหรับฉัน) จากข้อมูลในคำถาม แต่คุณสร้างจุดดี คำตอบการแก้ไข
เอ็ลเดอร์ Geek

@ElderGeek ที่จริงแล้วมันเป็นไฮไลต์ แต่ไม่ได้ดีAmazon EC2 t2.microฉันแก้ไขคำถามเพื่อให้ชัดเจนแท็กเพิ่มเกินไปที่จะเชื่อมโยงกับคำถามที่เกี่ยวข้องอื่น ๆ ได้ง่าย
user.dz

@Sneetsher ฉันเห็นว่าตอนนี้ ขอบคุณสำหรับความพยายามของคุณ!
เอ็ลเดอร์ Geek

5

ปัญหาในคำถามได้รับการแก้ไขโดยเพิ่มการแลกเปลี่ยนที่เหมาะสม เพื่อความสมบูรณ์ขอให้ฉันสรุปตัวเลือกเพิ่มเติมที่เรามีเมื่อเรียกใช้ Image Magick convertบนไฟล์ขนาดใหญ่ในระบบหน่วยความจำต่ำหรือเมื่อไม่มีการสลับหรือการสลับมีขนาดเล็กเกินไป

วิธีการที่กล่าวถึงด้านล่างนี้มีรายละเอียดเพิ่มเติมในคู่มือ Image 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ตัวเลือกที่จะใช้เวลาขนาดและชดเชยค่าตามที่กำหนดโดยภาพเวทมนตร์เรขาคณิต เราจะต้องติดกระเบื้องกลับมารวมกันเพื่อให้ได้ภาพที่ปรับขนาดโดยรวม น่าเสียดายที่กระแสข้อมูลใช้ไม่ได้กับทุกรูปแบบภาพ แต่ควรทำงานได้ดีกับรูปภาพ JPEG

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.