2016-02-09 25 views
9

मुझे एहसास हुआ कि मैं और अधिक स्मृति को आबंटित करने की तुलना में मेरी एडब्ल्यूएस Lambda प्रकार्य करने की जरूरत की जरूरत है अन्यथा मैं:एडब्ल्यूएस लैम्ब्डा और गलत स्मृति आवंटन

{ 
"errorMessage": "Metaspace", 
"errorType": "java.lang.OutOfMemoryError" 
} 

उदाहरण के लिए मैं आवंटित 128MB के साथ एक लैम्ब्डा समारोह है, यह दुर्घटनाओं उस त्रुटि के साथ हर समय जबकि कंसोल में यह कहता है "अधिकतम मेमोरी 56 एमबी का इस्तेमाल किया"।
फिर मैं 256 एमबी आवंटित करता हूं, यह अब और दुर्घटनाग्रस्त नहीं होता है लेकिन यह हमेशा मुझे 75 और 85 एमबी के बीच "अधिकतम मेमोरी इस्तेमाल" देता है।

कैसे आते हैं? धन्यवाद।

+0

जिस व्यक्ति ने मतदान किया वह शायद कारण बता सकता है। –

+0

मैं बस एक ही समस्या में भाग गया। क्या किसी को पता है यह क्यों होता है? –

+0

मेरे पास आपके इनपुट के लिए –

उत्तर

6

आपके जावा लैम्ब्डा फ़ंक्शन को आवंटित स्मृति की मात्रा ढेर, मेटा और आरक्षित कोड मेमोरी द्वारा साझा की जाती है।

जावा आदेश एक समारोह आवंटित 256M के लिए कंटेनर द्वारा निष्पादित है कुछ की तरह:

java -XX:MaxHeapSize=222823k -XX:MaxMetaspaceSize=26214k -XX:ReservedCodeCacheSize=13107k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar 

222823k + 26214k + 13107k = 256M

जावा आदेश एक समारोह आवंटित 384M के लिए कंटेनर द्वारा निष्पादित है

java -XX:MaxHeapSize=334233k -XX:MaxMetaspaceSize=39322k -XX:ReservedCodeCacheSize=39322k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar 

334233k + 39322k + 39322k = 384M

की तरह कुछ

तो, सूत्र

85% ढेर + 10% मेटा + 5% आरक्षित कोड कैश = 100 के लिए कॉन्फ़िगर समारोह स्मृति के%

मैं ईमानदारी से कैसे "मैक्स मेमोरी प्रयुक्त" पता नहीं है प्रतीत होता है क्लाउडवॉच लॉग में रिपोर्ट की गई गणना की गणना की जाती है। यह जो भी मैं देख रहा हूं उसके साथ संरेखित नहीं करता है।

+0

समान समस्याएं हैं। –

+1

आप इसे 'प्रबंधनFactory.getRuntimeMXBean() के साथ पा सकते हैं। GetInputArguments() '। –

2

यहाँ क्या हो रहा है दो चीजों में से एक हो सकता है:

  1. समारोह त्रुटि आप देख के कारण अतिरिक्त मेमोरी आरक्षण विफल हो रहा है और नाकाम रहने, और भी बहुत कुछ के लिए कम स्मृति रखते हुए, अनुरोध के रूप में जेवीएम को दुर्घटनाग्रस्त कर दिया।
  2. आप केवल मेटास्पेस को थका रहे हैं, जो @ जेस्टेल पॉइंट आउट कुल स्मृति का केवल 10% है, और आप केवल 56 एमबी हीप स्पेस का उपयोग कर रहे हैं।

जब आप एक बड़ी मेमोरी पदचिह्न पर जाते हैं, तो यह आपके मेटास्पेस आवंटन को बढ़ा रहा है, जो फ़ंक्शन को चलाने में सक्षम बनाता है।

संबंधित मुद्दे