ImageMagick कन्वर्ट और कम रैम


12

कृपया इमेजमाजिक पैकेज के लिए निम्न कमांड पर विचार करें:

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

इसलिए ऐसा लगता है कि अगर स्वैप सक्षम नहीं है, तो मैं यह देखने के लिए स्वैप बनाऊंगा कि क्या यह मेरे मुद्दों को हल करता है।

फ़ाइल मुझे देता है:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

मैं पूर्ण / पथ / / / पर भी पेस्ट करूंगा लेकिन दुर्भाग्य से इसमें संवेदनशील डेटा (क्लाइंट ईमेल पते आदि) शामिल हैं


1
आप sudoइस कमांड में क्यों इस्तेमाल कर रहे हैं ?
चार्ल्स ग्रीन

1
"किल्ड" संदेश प्राप्त हुआ जब मैंने नहीं किया
Aphire

3
-limit memory 64MiBYpu तर्क के साथ पिक्सेल कैश के लिए उपयोग की जाने वाली मेमोरी को सीमित करने की कोशिश कर सकता है (32MiB थोड़ा बहुत छोटा है। डिफ़ॉल्ट 1.5GiB है)। और यह आपको असफल होने की स्थिति में कुछ वर्णनात्मक आउटपुट देना चाहिए।
dadexix86

2
कमांड के straceसामने संलग्न के साथ कमांड चलाने की कोशिश करें , देखें कि सिस्टम कॉल क्या किए गए हैं, त्रुटियां फेंक दी गई हैं। आइए जानते हैं
सर्गी कोलोडाज़नी

2
किया हुआ। मुझे खुशी है कि आपने इसे हल कर लिया है! मुफ्त आउटपुट की पुष्टि करता है कि स्वैप बंद है और फ़ाइल जानकारी पुष्टि करती है कि यह गलत पहचान वाली फ़ाइल नहीं है। अच्छा संपादन! +1
एल्डर गीक

जवाबों:


7

मैं मान रहा हूं कि आप रैम से बाहर चल रहे हैं। watch cat /proc/meminfoजब आपकी प्रक्रिया चल रही हो तो आप इसे सत्यापित कर सकते हैं ।

अपने कार्य को पूरा करने के लिए आपके पास अपर्याप्त RAM और / या SWAP हो सकता है।

कम-राम की स्थिति के कारण, उस स्वैप का बीमा होता है swapon -aऔर यदि सिस्टम पर कोई स्वैप सेटअप नहीं है, तो अप्रयुक्त डिस्क पर स्वैप के लिए एक विभाजन बनाएं और इसे सक्षम करें। इससे समस्या का समाधान होने की संभावना है। यहाँ कैसे करें उस पर @Takkat द्वारा एक अच्छा उत्तर दिया गया है यदि आपके पास सर्वर के विभाजन के लिए पहुँच नहीं है, तो आप स्वैप के लिए स्वैप का उपयोग भी कर सकते हैं


1
ओपी एक क्लाउड सर्वर के बारे में है, एक स्वैप विभाजन बनाना एक विकल्प नहीं हो सकता है। आप नई स्वैप फ़ाइल भी जोड़ सकते हैं ।
user.dz

@ स्नेत्शर थॉट्स ने ठीक यही किया, अच्छी टिप्पणी
Aphire

@Sneetsher "ओपी एक क्लाउड सर्वर के बारे में है" प्रश्न में डेटा से (कम से कम मेरे लिए) स्पष्ट नहीं था, लेकिन आप एक अच्छी बात करते हैं। संपादन उत्तर।
एल्डर गीक

@ एल्डरगीक, वास्तव में, लेकिन यह अच्छी तरह से हाइलाइट नहीं किया गया है Amazon EC2 t2.micro, मैंने स्पष्ट, जोड़े गए टैग को भी संपादित किया है ताकि अन्य संबंधित प्रश्नों से आसानी से जुड़ा जा सके।
user.dz

@ स्नेत्शर मैं अब वह देखता हूं। आपके प्रयासों के लिए धन्यवाद!
एल्डर गीक

5

प्रश्न में समस्या को उचित स्वैप जोड़कर हल किया गया था। पूर्णता के लिए मुझे convertकम मेमोरी सिस्टम पर बड़ी फ़ाइलों पर छवि मैगिक चलाने पर अतिरिक्त विकल्पों का सारांश देना चाहिए , या जब कोई स्वैप उपलब्ध नहीं है, या स्वैप बहुत छोटा था।

नीचे दिए गए तरीकों को इमेज मैजिक मैनुअल में विस्तार से बताया गया है:

वास्तव में बड़े पैमाने पर छवि हैंडलिंग


सारांश:

  1. विकल्प के साथ मेमोरी का उपयोग सीमित करें -limit

    ऐसा करने से इमेज मैजिक इमेज हैंडलिंग के लिए एक अस्थायी फाइल बन जाएगी जैसे ही दी गई मेमोरी लिमिट पार हो गई। यह अस्थायी फ़ाइल निर्देशिका पर छवि मैजिक के लिए अनुमति लिखने की आवश्यकता है। हम ऐसा कोई भी रास्ता दे सकते हैं जहाँ अस्थायी फ़ाइल एक पर्यावरण चर में बनाई जाएगी 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 छवियों पर ठीक काम करने वाला है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.