"Java.lang.OutOfMemoryError: PermGen স্পেস" ত্রুটি নিয়ে কাজ করা


1222

সম্প্রতি আমি আমার ওয়েব অ্যাপ্লিকেশনটিতে এই ত্রুটিটি ছড়িয়েছি:

java.lang.OutOfMemoryError: PermGen স্পেস

এটি একটি সাধারণ হাইবারনেট / জেপিএ + আইসফ্রিজ / জেএসএফ অ্যাপ্লিকেশন টমক্যাট 6 এবং জেডিকে 1.6 এ চলছে। স্পষ্টতই এটি কয়েকবার অ্যাপ্লিকেশন পুনরায় প্রকাশের পরে ঘটতে পারে।

এর কারণ কী এবং এটি এড়াতে কী করা যেতে পারে? আমি কীভাবে সমস্যাটি সমাধান করব?


আমি এটি কয়েক ঘন্টা ধরে লড়াই করেছি, তবে আমার কোনও সুসংবাদ নেই। আমার সম্পর্কিত প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ১৯৯60০৮০/২ আপনার এখনও মেমরি ফুটো হতে পারে, যেমন ক্লাসগুলি আবর্জনা সংগ্রহ করা হয় না কারণ আপনার ওয়েব অ্যাপ্লিক্লাসলডারটি আবর্জনা সংগ্রহ করা হয়নি (এতে একটি বাহ্যিক রেফারেন্স রয়েছে যা সাফ করা হয়নি)। পারমজেন বাড়ানো কেবল আউটঅফমিউরিইরিরটিকে বিলম্বিত করবে এবং শ্রেণি আবর্জনা সংগ্রহের অনুমতি দেওয়া পূর্বশর্ত, তবে তাদের শ্রেণি লোডার এর সাথে এখনও উল্লেখ থাকলে আবর্জনা সংগ্রহ করে না ক্লাস সংগ্রহ করবে না।
ইরান মেডান

ডিসপ্লে ট্যাগলিব যোগ করার সময় আমি এই ত্রুটি পেয়েছি । অপসারণ এছাড়াও ত্রুটি সমাধান। কেন এমন?
মাস্ট

এবং আপনি কিভাবে এটি চালানো?
থোরবজর্ন রাভন অ্যান্ডারসন

13
JDK 1.8 ব্যবহার করুন: Met মেটাস্পেসে স্বাগতম
রাইটেক

উইন্ডোজ ব্যবহার করা থাকলে, কনফিগার ফাইলগুলিতে ম্যানুয়ালি পতাকা সেট করার চেষ্টা করার পরিবর্তে এই নির্দেশাবলী অনুসরণ করুন। এটি রানটাইমের সময় টমক্যাট দ্বারা কল করার জন্য রেজিস্ট্রিতে মানগুলি সঠিকভাবে সেট করে। stackoverflow.com/questions/21104340/…
ম্যাকগাইভার

উত্তর:


563

টমক্যাট শুরু হওয়ার পরে সমাধানটি ছিল এই ফ্ল্যাগগুলি JVM কমান্ড লাইনে যুক্ত করা:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

টমক্যাট পরিষেবাটি বন্ধ করে টমক্যাট / বিন ডিরেক্টরিতে গিয়ে tomcat6w.exe চালিয়ে আপনি এটি করতে পারেন। "জাভা" ট্যাবের অধীনে "জাভা বিকল্পগুলি" বাক্সে যুক্তি যুক্ত করুন। "ওকে" ক্লিক করুন এবং তারপরে পরিষেবাটি পুনরায় চালু করুন।

আপনি যদি ত্রুটি পান তবে নির্দিষ্ট পরিষেবা কোনও ইনস্টলড পরিষেবা হিসাবে উপস্থিত নেই আপনার চালানো উচিত:

tomcat6w //ES//servicename

সার্ভিসনেম যেখানে সার্ভিস.এমএসসি তে দেখা সার্ভারের নাম

উত্স: উপর orx এর মন্তব্য এরিকের তত্পর উত্তর


39
নীচের নিবন্ধটি -XX: + ইউজকনর্কমার্কসুইপজিসি এবং-এক্সএক্স: ম্যাক্স্পার্মসাইজ = 128 মি হিসাবেও পরামর্শ দেয়। my.opera.com/karmazilla/blog/2007/03/13/…
টেলর

30
-এক্সএক্স: + সিএমএস স্পার্মজেনসুইপিংএনবলড এই বিকল্পটি কর্মক্ষমতা হ্রাস করে। এটি প্রতিটি অনুরোধকে আমাদের সিস্টেমে স্বাভাবিকের চেয়ে তিন গুণ বেশি সময় নেয়। যত্ন সহকারে ব্যবহার করুন।
এল্ডশেল

10
আমার জন্য কাজ করেছেন - ধন্যবাদ - আমি টমক্যাট with সহ উবুন্টু ১০.১০ এ করছি - আমি একটি নতুন ফাইল তৈরি করেছি: /usr/share/tomcat6/bin/setenv.sh এবং এর সাথে নিম্নলিখিত লাইনটি যুক্ত করেছি: JAVA_OPTS = "- Xms256m -Xmx512m - XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEn सक्षम "- টমক্যাটটি পুনরায় চালু করুন: sudo /etc/init.d/tomcat6 শুরু
সামি

24
6.0.29 প্রারম্ভে হুল বিড়াল, আমার catalina.out লগ ফাইল থেকে: "CMSClassUnloadingEnabled ভবিষ্যতে CMSPermGenSweepingEnabled স্থানে ব্যবহার করুন"
knb

222
প্রথমে এই পতাকাগুলি কী করে তা বোঝানো দুর্দান্ত হবে be কেবল বলেছিলেন: "এটি করুন এবং উপভোগ করুন" যথেষ্ট আইএমএইচও নয়।
নাইকেম

251

আপনি -XX:MaxPermSize=128Mবরং চেষ্টা করুন -XX:MaxPermGen=128M

আমি এই মেমোরি পুলটির সুনির্দিষ্ট ব্যবহার বলতে পারি না, তবে এটি জেভিএম-এ লোড হওয়া ক্লাসের সংখ্যার সাথে করতে হবে। (এইভাবে টমক্যাটের জন্য ক্লাস আনলোডিং সমস্যা সমাধান করতে পারে)) আপনার অ্যাপ্লিকেশনগুলি যদি ক্লাস তৈরি করে এবং সংকলন করে তবে ডিফল্টের চেয়ে বড় মেমরি পুলের সম্ভাবনা বেশি।


9
প্রকৃতপক্ষে, এটি কেবল ওমরআর স্থগিত করবে। ফ্রেঙ্ককিভিট ব্লগের দুটি লিঙ্ক সহ আননের দ্বারা শুরু করা নীচের উত্তরটি দেখুন।
Rade_303

এই বিকল্পগুলি এখানে ব্যাখ্যা করা হয়েছে: oracle.com/technetwork/java/javase/tech/…
amos

153

একাধিক মোতায়েনের পরে ঘটে যাওয়া অ্যাপ সার্ভার পার্মজেন ত্রুটিগুলি সম্ভবত আপনার পুরানো অ্যাপ্লিকেশনগুলির ক্লাস লোডারগুলিতে ধারক দ্বারা রাখা রেফারেন্সের কারণে ঘটে caused উদাহরণস্বরূপ, একটি কাস্টম লগ স্তরের শ্রেণি ব্যবহারের ফলে অ্যাপ্লিকেশন সার্ভারের শ্রেণি লোডার দ্বারা রেফারেন্স রাখা হবে। আপনি আধুনিক (JDK6 +) জেভিএম বিশ্লেষণ সরঞ্জামগুলি যেমন Jmap এবং Jhat ব্যবহার করে আপনার অ্যাপে কোন ক্লাসগুলি চালিয়ে যাচ্ছে তা দেখতে এবং তাদের ব্যবহারটি নতুন করে ডিজাইন বা মুছে ফেলার মাধ্যমে আপনি এই আন্তঃ শ্রেণীর লোডার লিকগুলি সনাক্ত করতে পারেন। সাধারণ সন্দেহভাজন হ'ল ডেটাবেস, লগার এবং অন্যান্য বেস-ফ্রেমওয়ার্ক-স্তরের লাইব্রেরি।

ক্লাসলোডার ফাঁস দেখুন : ভয়ঙ্কর "java.lang.OutOfMemoryError: PermGen স্পেস" ব্যতিক্রম এবং বিশেষত এর ফলোআপ পোস্ট


3
এটি সমস্যার কেবলমাত্র সঠিক সমাধান, কিছু ক্ষেত্রে এটি প্রয়োগ করা খুব কঠিন।
Rade_303

আর একটি খুব ভাল উত্স হ'ল people.apache.org/~markt/preferencesations/… (টমক্যাট রিলিজ ম্যানেজারের কাছ থেকে)।
gavenkoa

22
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
জোছিম সৌর

68

লোকেদের সাধারণ ভুলগুলি ভেবে থাকে যে গাদা স্থান এবং পার্জেন স্পেস একই, যা মোটেও সত্য নয়। আপনার কাছে গাদাতে প্রচুর জায়গা বাকি থাকতে পারে তবে পার্জেজে স্মৃতি হারিয়ে যেতে পারে।

PermGen এ আউটফেমারির সাধারণ কারণগুলি ক্লাসলোডার er যখনই কোনও ক্লাসটি জেভিএম-এ লোড করা হয়, ক্লাসলোডার সহ তার সমস্ত মেটা ডেটা পার্মজেন অঞ্চলে রাখা হয় এবং যখন ক্লাস লোডার যে লোডযুক্ত তাদের আবর্জনা সংগ্রহের জন্য প্রস্তুত হয় তখন এগুলি আবর্জনা সংগ্রহ করা হবে। কেস ক্ষেত্রে ক্লাসলোডারটির দ্বারা লোড হওয়া সমস্ত ক্লাসের চেয়ে মেমরি ফাঁস হয় স্মৃতিতে থেকে যায় এবং একবার আপনি কয়েকবার পুনরাবৃত্তি করলে এটি পরমজেন আউটফেমরির কারণ হয়ে যায়। শাস্ত্রীয় উদাহরণটি জাভা.লং.আউটআউফ মেমরিরির: টমকেটের পার্মজেন স্পেস

এটি সমাধানের জন্য এখন দুটি উপায় রয়েছে:
১. মেমরি ফাঁসের কারণ বা যদি কোনও স্মৃতি ফাঁস হয় তা সন্ধান করুন।
২. জেভিএম প্যারাম -XX:MaxPermSizeএবং ব্যবহার করে পার্মজেন স্পেসের আকার বাড়ান -XX:PermSize

আপনি আরও 2 টি জাভা জাং এর সমাধান সমাধানে পরীক্ষা করতে পারেন more


3
কীভাবে পরম পাস করবেন -XX:MaxPermSize and -XX:PermSize?? আমি খুঁজে পাচ্ছি না catalina.bat। আমার টমক্যাট সংস্করণটি 5.5.26
ডেকার্ড

ক্লাস লোডারটির মেমরি ফাঁস কীভাবে পাওয়া যাবে? আপনি কি কোনও সরঞ্জাম সুপারিশ করেন?
অমিত

সরঞ্জাম প্রস্তাবনাগুলির জন্য @ এমিট করুন, এই প্রশ্নের সম্প্রদায়ের উইকি উত্তর দেখুন।
বেরেট

@ ডেকার্ড টমক্যাট / বিন ডিরেক্টরিতে যাচ্ছেন এবং টমক্যাট w ডব্লু.এক্সই চালাচ্ছেন। "জাভা" ট্যাবের অধীনে "জাভা বিকল্পগুলি" বাক্সে যুক্তি যুক্ত করুন। "ওকে" ক্লিক করুন
জেব 8

43

-XX:MaxPermSize=128mসান জেভিএমের জন্য কমান্ড লাইন প্যারামিটারটি ব্যবহার করুন (অবশ্যই আপনার প্রয়োজন আকারের জন্য 128 প্রতিস্থাপন করুন)।


9
একমাত্র সমস্যাটি হ'ল আপনি কেবল অনিবার্যতায় বিলম্ব করছেন-এমন সময় আপনি সেখানে হেডরুম থেকেও চলে আসবেন। এটি একটি দুর্দান্ত ব্যবহারিক সমাধান, তবে এটি স্থায়ীভাবে সমাধান করে না।
টিম হাওল্যান্ড

Eclipse এ একই জিনিস ঘটে এবং যে কোনও সময় আপনার প্রচুর গতিশীল ক্লাস লোড হয়। শ্রেণিবদ্ধরা নিষ্পত্তি হয় না এবং চিরকাল স্থায়ী প্রজন্মের মধ্যে বাস করে
ম্যাট

1
বিশেষত বড় হাডসনের কাজটি সম্পাদন করার সময় আমি পারমজেনের বাইরে চলে যাচ্ছিলাম ... এটি আমার জন্য এটি স্থির করে দিয়েছে।
এইচডিভ

10
@ টিমহোল্যান্ড, এটির স্থায়ী সমাধান হতে পারে যদি মূল কারণটি ক্লাসলোডার ফুটো না হয়, আপনার ওয়েব অ্যাপ্লিকেশনে কেবলমাত্র অনেকগুলি ক্লাস / স্থির ডেটা।
পিয়েটার টার্ক

উত্স থেকে জিনকিনস / হাডসন তৈরি করার সময় এইচডিএভ হিসাবে একই সমস্যা পেয়েছে।
লুইসগাব

38

চেষ্টা করুন -XX:MaxPermSize=256mএবং যদি এটি অবিরত থাকে, চেষ্টা করুন-XX:MaxPermSize=512m


56
এবং যদি এটি এখনও অবিরত থাকে তবে XX:MaxPermSize=1024m:)
igo

38
এবং যদি এটি এখনও অবিরত থাকে XX: ম্যাক্সপার্মসাইজ = 2048 মি :)
টমাস

16
এবং যদি এটি এখনও অব্যাহত থাকে তবে আপনার অ্যাপ্লিকেশনটি নিয়ে নতুন করে চিন্তা করুন !! অথবা XX: ম্যাক্সপার্মসাইজ = 4096 মি :) চেষ্টা করুন
জোনাথন

17
আপনি 8192 মিটার চেষ্টা করেও খানিকটা ওভারকিল করতে পারেন
জ্যাসেক পিটাল

12
ওভারকিল প্রকৃতপক্ষে - 640 কেবি কারও পক্ষে যথেষ্ট হওয়া উচিত!
জোয়েল পুররা

28

আমি যোগ -XX: MaxPermSize = 128m করতে (আপনি পরীক্ষা করতে পারেন যা সেরা কাজ করে) VM- র আর্গুমেন্ট হিসাবে আমি Eclipse IDE ব্যবহার করছি। জেভিএম অধিকাংশ সালে ডিফল্ট PermSize প্রায় 64MB যা মেমরি রান আউট যদি অনেকগুলি ক্লাস বা প্রকল্প মধ্যে Strings বিপুল সংখ্যা আছে।

অন্ধকার, এটি এছাড়াও বর্ণনা করা হয়েছে উত্তর

পদক্ষেপ 1 : সার্ভারস ট্যাবে টমক্যাট সার্ভারে ডাবল ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 2 : ওপেন লঞ্চ কনফারেন্স এবং -XX: MaxPermSize = 128mবিদ্যমান ভিএম যুক্তির শেষে যুক্ত করুন ।

এখানে চিত্র বর্ণনা লিখুন


1
আপনার সেরা বিস্তারিত উত্তরের জন্য ধন্যবাদ (দ্রষ্টব্য: "সম্পাদনা কনফিগারেশন" উইন্ডোটি খুলতে "ওপেন লঞ্চ কনফিগারেশন" টিপুন ... তবে আমি নিম্নলিখিত পরামিতিগুলি ব্যবহার করেছি: "-এক্সএক্স: + সিএমএসক্লাসউনলোডিং -নেবল-এক্সএক্স: + সিএমএসপির্মজেনসুইপিংএনবলড"
ক্রিস সিম

23

আমি একটি জটিল ওয়েব অ্যাপ্লিকেশন মোতায়েন করার সময় এবং অজ্ঞাপূর্ণ করার সময় আমি এই সমস্যার বিরুদ্ধে আমার মাথা ঠোঁট করছি এবং ভেবেছিলাম যে আমি একটি ব্যাখ্যা এবং আমার সমাধান যুক্ত করব।

আমি যখন অ্যাপাচি টমক্যাটে একটি অ্যাপ্লিকেশন স্থাপন করি তখন সেই অ্যাপ্লিকেশনের জন্য একটি নতুন ক্লাসলোডার তৈরি হয়। ক্লাসলুডারটি তার পরে অ্যাপ্লিকেশনটির সমস্ত ক্লাস লোড করতে ব্যবহৃত হয়, এবং অজ্ঞাতসারে, সবকিছু সুন্দরভাবে চলে যাওয়ার কথা। তবে বাস্তবে এটি এতটা সহজ নয়।

ওয়েব অ্যাপ্লিকেশনটির জীবনে নির্মিত এক বা একাধিক ক্লাসগুলির স্থির রেফারেন্স রয়েছে যা রেখার পাশাপাশি কোথাও ক্লাসলোডারকে উল্লেখ করে। যেহেতু রেফারেন্সটি মূলত স্থিতিশীল, কোনও পরিমাণ জঞ্জাল সংগ্রহ এই রেফারেন্সটিকে পরিষ্কার করবে না - ClassLoader, এবং এটি যে সমস্ত ক্লাসে বোঝায়, এখানে থাকার জন্য এখানে রয়েছে।

এবং বেশ কয়েকটি রিডপ্লাইয়ের পরে, আমরা আউটঅফমিউরিওরির মুখোমুখি।

এখন এটি মোটামুটি গুরুতর সমস্যা হয়ে দাঁড়িয়েছে। আমি নিশ্চিত করতে পারি যে টমক্যাট প্রতিটি পুনর্নির্মাণের পরে পুনরায় চালু হয়েছে, তবে এটি কেবল অ্যাপ্লিকেশনকে পুনর্বার নিয়োগ না করে পুরো সার্ভারটি নিচে নেবে যা প্রায়শই সম্ভব হয় না।

সুতরাং পরিবর্তে আমি কোডে একসাথে একটি সমাধান রেখেছি, যা অ্যাপাচি টমক্যাট 6.0 এ কাজ করে। আমি অন্য কোনও অ্যাপ্লিকেশন সার্ভারে পরীক্ষা করিনি, এবং অবশ্যই জোর দিতে হবে যে এটি সম্ভবত অন্য কোনও অ্যাপ্লিকেশন সার্ভারে পরিবর্তন ছাড়া কাজ না করে

আমি আরও বলতে চাই যে ব্যক্তিগতভাবে আমি এই কোডটিকে ঘৃণা করি এবং বিদ্যমান কোডটি যথাযথ শাটডাউন এবং ক্লিনআপ পদ্ধতি ব্যবহারের জন্য পরিবর্তন করা যায় যদি কেউ এইটিকে "দ্রুত ফিক্স" হিসাবে ব্যবহার না করে । আপনার কোডটির উপর নির্ভর করে যদি কোনও বাহ্যিক গ্রন্থাগার থাকে তবে এটি কেবলমাত্র একবার ব্যবহার করা উচিত (আমার ক্ষেত্রে এটি একটি রেডিয়াস ক্লায়েন্ট ছিল) যা তার নিজস্ব স্ট্যাটিক রেফারেন্সগুলি পরিষ্কার করার কোনও উপায় সরবরাহ করে না।

যাইহোক, কোড সহ। অ্যাপ্লিকেশনটি যেখানে অপ্রকাশিত রয়েছে সেদিকে এটি কল করা উচিত - যেমন সার্লেটের ধ্বংসাত্মক পদ্ধতি বা (আরও ভাল পদ্ধতির) কোনও সার্লেটলেট কনটেক্সটলাইস্টেনারের প্রসঙ্গটি ডিজট্রয়েড পদ্ধতি।

//Get a list of all classes loaded by the current webapp classloader
WebappClassLoader classLoader = (WebappClassLoader) getClass().getClassLoader();
Field classLoaderClassesField = null;
Class clazz = WebappClassLoader.class;
while (classLoaderClassesField == null && clazz != null) {
    try {
        classLoaderClassesField = clazz.getDeclaredField("classes");
    } catch (Exception exception) {
        //do nothing
    }
    clazz = clazz.getSuperclass();
}
classLoaderClassesField.setAccessible(true);

List classes = new ArrayList((Vector)classLoaderClassesField.get(classLoader));

for (Object o : classes) {
    Class c = (Class)o;
    //Make sure you identify only the packages that are holding references to the classloader.
    //Allowing this code to clear all static references will result in all sorts
    //of horrible things (like java segfaulting).
    if (c.getName().startsWith("com.whatever")) {
        //Kill any static references within all these classes.
        for (Field f : c.getDeclaredFields()) {
            if (Modifier.isStatic(f.getModifiers())
                    && !Modifier.isFinal(f.getModifiers())
                    && !f.getType().isPrimitive()) {
                try {
                    f.setAccessible(true);
                    f.set(null, null);
                } catch (Exception exception) {
                    //Log the exception
                }
            }
        }
    }
}

classes.clear();

আমি জানি এটি লেখার পরে 8 বছর পেরিয়ে গেছে, তবে কোথাও কোথাও এবং এরপরে আমি আরও গভীর কারণ এবং সমাধান খুঁজে পেয়েছি। এটি হ'ল যখন ওয়েব অ্যাপের মধ্যে থাকা সমস্ত ক্লাস প্রাসঙ্গিক শ্রেণিবোর্ডারের মালিকানাধীন, সূচনা এবং শাটডাউন কলব্যাকের সূচনা করে যে থ্রেডটি প্যারেন্ট ক্লাসলোডারের মালিক। এর অর্থ হ'ল যদি শাটডাউন কোড কোনও থ্রেড-লোকাল ভেরিয়েবল শুরু করে, এটি প্যারেন্ট ক্লাসলোডারকে প্রাসঙ্গিক ক্লাসলোডারের একটি রেফারেন্স ধরে রাখে, ভাল ক্লিনআপ বাধা দেয়।
এডওয়ার্ড টরবেট

ভাগ্যক্রমে, একটি খুব সহজ ফিক্স আছে - শাটডাউন পদ্ধতিতে সমস্ত কোডকে একটি নতুন থ্রেড অবজেক্টের রান পদ্ধতিতে সরান। তারপরে শাটডাউন পদ্ধতিতে, এই থ্রেডটি শুরু করুন এবং এটি শেষ হওয়ার জন্য অপেক্ষা করুন। ক্লিনআপ কোডটি অভিন্নরূপে কার্যকর করা হবে তবে যে কোনও থ্রেড-স্থানীয় ভেরিয়েবলগুলি ফাঁসের পরিবর্তে প্রসঙ্গের শ্রেণিবদ্ধের কাছে আবদ্ধ থাকবে।
এডওয়ার্ড টরবেট 15

20

java.lang.OutOfMemoryError: PermGenস্থান বার্তা নির্দেশ করে যে মেমরি স্থায়ী জেনারেশন জায়গাটিতে ক্লান্ত হয়।

যে কোনও জাভা অ্যাপ্লিকেশনগুলিতে সীমিত পরিমাণে মেমরি ব্যবহারের অনুমতি রয়েছে। আপনার নির্দিষ্ট অ্যাপ্লিকেশনটি যে সঠিক পরিমাণ মেমরি ব্যবহার করতে পারে তা অ্যাপ্লিকেশন প্রারম্ভের সময় নির্দিষ্ট করা হয়।

জাভা মেমরিটি বিভিন্ন অঞ্চলে আলাদা করা হয় যা নিম্নলিখিত চিত্রটিতে দেখা যায়:

এখানে চিত্র বর্ণনা লিখুন

মেটাস্পেস: একটি নতুন স্মৃতির স্থান জন্মগ্রহণ করে

জেডিকে 8 হটস্পট জেভিএম এখন ক্লাস মেটাডাটার উপস্থাপনের জন্য নেটিভ মেমরি ব্যবহার করছে এবং একে মেটাস্পেস বলে; ওরাকল জেআরোকিত এবং আইবিএম জেভিএম এর অনুরূপ।

সুসংবাদটি হ'ল এর অর্থ জাভা -8_ডাউনলোড বা তার চেয়ে বেশি java.lang.OutOfMemoryError: PermGenব্যবহার করে আর কোনও স্থান সমস্যা এবং আপনার এই মেমরি স্পেসটি টিউন এবং নিরীক্ষণের প্রয়োজন নেই ।


17

1) পার্মজেন মেমরির আকার বাড়ানো

প্রথমটি যেটি করতে পারেন তা হ'ল স্থায়ী প্রজন্মের হিপ স্পেসের আকারকে আরও বড় করা। এটি সাধারণ –Xms (প্রাথমিক স্তূপের আকার সেট করুন) এবং –Xmx (সর্বাধিক হিপ আকার সেট করুন) জেভিএম যুক্তি দিয়ে করা যায় না, যেহেতু উল্লিখিত রয়েছে, স্থায়ী প্রজন্মের হিপ স্থানটি নিয়মিত জাভা হিপ স্থান থেকে সম্পূর্ণ পৃথক এবং এই আর্গুমেন্টগুলি সেট করে এই নিয়মিত জাভা হ্যাপ স্পেসের জন্য স্থান। তবে, অনুরূপ যুক্তি রয়েছে যা স্থায়ী প্রজন্মের স্তূপের আকারকে আরও বড় করতে (কমপক্ষে সান / ওপেনজেডিকে jvms সহ) ব্যবহার করা যেতে পারে:

 -XX:MaxPermSize=128m

ডিফল্ট 64 মি।

2) স্যুইপিং সক্ষম করুন

ভাল করার জন্য এটির যত্ন নেওয়ার আরেকটি উপায় হ'ল ক্লাসগুলি লোড করার অনুমতি দেওয়া যাতে আপনার পার্মজেন কখনই শেষ হয় না:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

অতীতে এই জাতীয় জিনিসগুলি আমার জন্য যাদু কাজ করেছিল। যদিও একটি জিনিস, সেগুলি ব্যবহারে একটি উল্লেখযোগ্য পারফরম্যান্স বাণিজ্য রয়েছে, যেহেতু পার্জেন সুইপগুলি আপনার করা প্রতিটি অনুরোধের জন্য অতিরিক্ত 2 টি অনুরোধ বা সেই লাইন বরাবর কিছু করার মতো করবে। আপনার ব্যবসায়ের সাথে আপনার ব্যবহারের ভারসাম্য বজায় রাখতে হবে।

আপনি এই ত্রুটির বিশদটি পেতে পারেন।

http://faisalbhagat.blogspot.com/2014/09/java-outofmemoryerror-permgen.html



বিকল্প 2 দুর্দান্ত, তবে কেবলমাত্র সতর্ক করে দেওয়া উচিত যে এটি উত্পাদন পরিবেশে ব্যবহার করা উচিত নয়। সাধারণত উন্নয়নের পরিবেশে এটিকে রাখার জন্য সাধারণত সর্বোত্তম। তবে জাভা 8 openjdk.java.net/jeps/122
এইচডিস্ট

16

বিকল্পভাবে, আপনি জে রকিতে স্যুইচ করতে পারেন যা সূর্যের জেভিএমের পরে পার্ভেনকে আলাদাভাবে পরিচালনা করে। এটির পাশাপাশি সাধারণত আরও ভাল পারফরম্যান্স থাকে।

http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html


4
যদিও জে রোকিতের সত্যিকার অর্থে কোনও পার্মজেন নেই, তবে এটি দীর্ঘমেয়াদে সহায়তা করবে না। java.lang.OutOfMemoryError: There is insufficient native memoryপরিবর্তে আপনি পাবেন ।
স্ট্র্যাকট্রেসার

14

আমরা এখানে যে সমস্যাটির বিষয়ে কথা বলছি তাতে আমার সমস্যা ছিল, আমার পরিস্থিতি হল গ্রহন-হেলিওস + টমক্যাট + জেএসএফ এবং আপনি যা করছেন তা টমক্যাটটিতে একটি সাধারণ অ্যাপ্লিকেশন তৈরি করা। আমি এখানে একই সমস্যাটি দেখিয়েছিলাম, নীচে এটি সমাধান করেছি।

গ্রহনে সার্ভারের ট্যাবে যান নিবন্ধিত সার্ভারে ডাবল ক্লিক করুন আমার ক্ষেত্রে টমক্যাট .0.০, এটি আমার ফাইল সার্ভারটি খুলবে সাধারণ রেজিস্ট্রেশন সম্পর্কিত তথ্য। "সাধারণ তথ্য" বিভাগে " ওপেন লঞ্চ কনফিগারেশন" লিঙ্কটিতে ক্লিক করুন, এটি ভিএম আর্গুমেন্টে আর্গুমেন্ট ট্যাবে সার্ভার অপশনগুলি কার্যকর করতে এই দুটি এন্ট্রি শেষে যুক্ত করা হয়েছে

-XX: MaxPermSize = 512m
-XX: PermSize = 512m

এবং প্রস্তুত।


14

আজকাল সবচেয়ে সহজ উত্তর হ'ল জাভা 8 ব্যবহার করা।

পারমজেন মেমরিটি নিয়মিত মেমরি পুলের সাথে একত্রে মিশ্রিত হওয়ার ফলে এটি আর পার্মজেন স্পেসের জন্য একচেটিয়াভাবে স্মৃতি সংরক্ষণ করে না।

মনে রাখবেন যে আপনি -XXPermGen...=...যদি জাভা 8 না চান যে তারা কিছু করেন না এমন অভিযোগ করার জন্য আপনাকে সমস্ত অ-মানক জেভিএম স্টার্টআপ প্যারামিটারগুলি সরিয়ে ফেলতে হবে ।


হ্যালো, এই উত্তরটি ইতিমধ্যে দেওয়া হয়েছে: stackoverflow.com/a/22897121/505893 । আপনার উত্তরটি মুছে ফেলুন, স্পষ্টতার জন্য। প্রয়োজনে আপনি উত্তরটি উল্লেখ করে উন্নতি করতে পারেন। ধন্যবাদ;)
ব্লু করুন

6
@ ব্লুশ এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ; যাইহোক, এই উত্তরটি আউটঅফমিউরিঅ্যাক্সপশন সম্পর্কে কথা বলা এবং মেটাডেটা ফাঁস করার পক্ষে সব দিক থেকে যায়। পার্মজেন বিকল্পটি অপসারণের খুব গুরুত্বপূর্ণ বিষয়গুলি উল্লেখ করতেও এটি ব্যর্থ হয়। সংক্ষেপে, আমি নিশ্চিত না যে আমি উত্তরটি উন্নত করব, বরং এটি আবার লিখব। এটি যদি কেবল একটি দ্রুত স্পর্শ-আপ হয় তবে আমি কম দ্বিধাগ্রস্থ বোধ করছিলাম তবে মনে হচ্ছে এটি দ্রুত স্পর্শ-আপের চেয়ে অনেক বেশি হবে এবং আমি মূল লেখককে অপমান করতে ঘৃণা করি। তবুও, এই উত্তর তালিকাটি একটি জগাখিচুড়ির কুকুরের ডিনার, এবং সম্ভবত আমার পোস্টটিকে হত্যা করা সর্বোত্তম would
এডউইন বাক 13

8
  1. টমকাটের বিন ডিরেক্টরি থেকে tomcat7w খুলুন বা মনিটর টমক্যাট টাইপ করুন স্টার্ট মেনুতে (একটি ট্যাবড উইন্ডো বিভিন্ন পরিষেবা তথ্যের সাথে খোলে)।
  2. জাভা বিকল্পগুলির পাঠ্য অঞ্চলে এই লাইনটি যুক্ত করুন:

    -XX:MaxPermSize=128m
  3. প্রাথমিক মেমরি পুলটি 1024 এ সেট করুন (alচ্ছিক)।
  4. সর্বোচ্চ মেমরি পুলটি 1024 এ সেট করুন (alচ্ছিক)।
  5. ওকে ক্লিক করুন।
  6. টমক্যাট পরিষেবাটি পুনরায় চালু করুন।

6

পার্ম জেন স্পেস ত্রুটিটি বড় জায়গার পরিবর্তে কোডটি কার্যকর করার জন্য jvm সরবরাহিত স্থানের কারণে ঘটে।

ইউনিক্স অপারেটিং সিস্টেমে এই সমস্যার সর্বোত্তম সমাধান হ'ল বাশ ফাইলে কিছু কনফিগারেশন পরিবর্তন করা। নিম্নলিখিত পদক্ষেপগুলি সমস্যার সমাধান করে।

gedit .bashrcটার্মিনালে রান কমান্ড ।

JAVA_OTPSনিম্নলিখিত মান সহ ভেরিয়েবল তৈরি করুন :

export JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=512m"

বাশ ফাইল সংরক্ষণ করুন। টার্মিনালে এক্সিকিউ বাশ রান কমান্ড। সার্ভারটি পুনরায় চালু করুন।

আমি আশা করি এই পদ্ধতিটি আপনার সমস্যার জন্য কাজ করবে। আপনি যদি 8 এর চেয়ে কম জাভা সংস্করণ ব্যবহার করেন তবে এই সমস্যাটি মাঝে মধ্যে ঘটে। তবে আপনি জাভা 8 ব্যবহার করলে সমস্যাটি কখনই ঘটে না।


5

স্থায়ী জেনারেশনের আকার বাড়ানো বা জিসি প্যারামিটারগুলি টুইট করা আপনার যদি সত্যিকারের স্মৃতি মেমরি ফাঁস না করে তবে সাহায্য করবে না। যদি আপনার অ্যাপ্লিকেশন বা এটি কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে তবে লিক ক্লাস লোডারদের এই আসক্তিটি খুঁজে বের করার এবং এটি সমাধান করার একমাত্র আসল এবং স্থায়ী সমাধান। এমন অনেকগুলি সরঞ্জাম রয়েছে যা আপনাকে সহায়তা করতে পারে, সাম্প্রতিক একটি হ'ল প্লামবার যা প্রয়োজনীয় সক্ষমতা সহ সদ্য একটি নতুন সংস্করণ প্রকাশ করেছে।


5

এছাড়াও আপনি যদি আপনার ওয়েব অ্যাপে লগ 4 জ ব্যবহার করে থাকেন তবে লগ 4 জ ডকুমেন্টেশনে এই অনুচ্ছেদটি পরীক্ষা করে দেখুন ।

দেখে মনে হচ্ছে আপনি যদি ব্যবহার করছেন PropertyConfigurator.configureAndWatch("log4j.properties"), আপনি যখন ওয়েবপৃষ্ঠাটি প্রকাশ না করেন তখন মেমরি ফাঁস হয়।


4

আমি হাইবারনেট + + অন্ধকার RCP সংমিশ্রণ, ব্যবহার করার চেষ্টা আছে -XX:MaxPermSize=512mএবং -XX:PermSize=512mএবং এটা আমার জন্য কাজ বলে মনে হয়।


4

সেট -XX:PermSize=64m -XX:MaxPermSize=128m। পরে আপনি আরও বৃদ্ধি চেষ্টা করতে পারেন MaxPermSize। আশা করি এটি কাজ করবে। একই কাজ আমার জন্য। সেটিংটি কেবল MaxPermSizeআমার পক্ষে কাজ করে নি।


4

আমি বেশ কয়েকটি উত্তর চেষ্টা করেছিলাম এবং শেষ পর্যন্ত কাজটিই করেছিল যা কেবলমাত্র পম মধ্যে সংকলক প্লাগইন জন্য এই কনফিগারেশন ছিল:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <fork>true</fork>
        <meminitial>128m</meminitial>
        <maxmem>512m</maxmem>
        <source>1.6</source>
        <target>1.6</target>
        <!-- prevent PermGen space out of memory exception -->
        <!-- <argLine>-Xmx512m -XX:MaxPermSize=512m</argLine> -->
    </configuration>
</plugin>

আশা করি এই সাহায্য করবে


"আরগলাইন" maven- সংকলক-প্লাগইন 2.4 দ্বারা স্বীকৃত নয়। এটি কেবল "কম্পাইলারআর্গমেন্ট" সমর্থন করে, যা ত্রুটি দেয়: <compilerArgument> -XX: MaxPermSize = 256m </compilerArgument> [ERROR] জাভ্যাক কার্যকর করতে ব্যর্থ হয়েছে, তবে ত্রুটিটি বিশ্লেষণ করতে পারেনি: জাভাক: অবৈধ পতাকা: -XX: ম্যাকস্পার্মসাইজ = 256 মি ব্যবহার : জাভাক <অপশন> <উত্স ফাইল>
অ্যালেক্স

যদি আপনার সংকলনের পর্বটি পার্জেনের বাইরে চলে যায় তবে ম্যাভেন-সংকলক-প্লাগইনে <compilerArgument> সেট করুন। ইউনিট পরীক্ষা permgen সেট চলমান আউট হয় <argLine> ম্যাভেন-surefire-প্লাগইন মধ্যে
কোয়ার্টি

4

আমার জন্য এটি সমাধানও; তবে, আমি লক্ষ্য করেছি যে সার্লেট পুনরায় আরম্ভের সময়গুলি আরও খারাপ ছিল, সুতরাং এটি উত্পাদনের ক্ষেত্রে আরও ভাল ছিল, এটি ছিল এক ধরণের উন্নয়নের ক্ষেত্রে drag


3

মেমরির কনফিগারেশন আপনার অ্যাপের প্রকৃতির উপর নির্ভর করে।

তুমি কি করছো?

পরিমাণে লেনদেনের পরিমাণ কত?

আপনি কত ডেটা লোড করছেন?

প্রভৃতি

প্রভৃতি

ইত্যাদি

সম্ভবত আপনি নিজের অ্যাপ্লিকেশনটিকে প্রোফাইল করতে পারেন এবং আপনার অ্যাপ্লিকেশন থেকে কিছু মডিউল সাফ করা শুরু করতে পারেন।

স্পষ্টতই এটি কয়েকবার অ্যাপ্লিকেশন পুনরায় প্রকাশের পরে ঘটতে পারে

টমক্যাটটিতে গরম মোতায়েন রয়েছে তবে এটি স্মৃতি গ্রাস করে। আপনার ধারকটি একবারে আবার চালু করার চেষ্টা করুন। এছাড়াও আপনাকে প্রোডাকশন মোডে চালানোর জন্য কত পরিমাণে মেমরি প্রয়োজন তা জানতে হবে, এটি এই গবেষণার জন্য ভাল সময় বলে মনে হচ্ছে।


3

তারা হুল বিড়াল (6.0.28 বা 6.0.29) এর অতি সাম্প্রতিক Rev সার্ভলেট redeploying কাজটি পরিচালনা অনেক ভালো।


3

আমি ঠিক একই সমস্যাটি নিয়ে চলেছি, তবে দুর্ভাগ্যক্রমে প্রস্তাবিত সমাধানগুলির কোনওই সত্যিই আমার পক্ষে কার্যকর হয়নি। মোতায়েনের সময় সমস্যাটি ঘটেনি এবং আমি কোনও গরম মোতায়েনও করছিলাম না।

আমার ক্ষেত্রে সমস্যাটি প্রতিবার একই সময়ে আমার ওয়েব-অ্যাপ্লিকেশনটি কার্যকর করার সময় ঘটেছিল, যখন (হাইবারনেটের মাধ্যমে) ডাটাবেসে সংযোগ করার সময়।

এই লিঙ্কটি (পূর্বেও উল্লিখিত) সমস্যা সমাধানের জন্য পর্যাপ্ত অন্তর্দৃষ্টি সরবরাহ করেছিল। Jdbc- (mysql) -ড্রাইভারকে WEB-INF এর বাইরে এবং jre / lib / ext / ফোল্ডারে নিয়ে যাওয়া সমস্যার সমাধান করেছে বলে মনে হচ্ছে। এটি আদর্শ সমাধান নয়, যেহেতু নতুন জেআরইতে আপগ্রেড করার জন্য আপনাকে ড্রাইভারটি পুনরায় ইনস্টল করতে হবে। অন্য প্রার্থী যা একই ধরণের সমস্যার কারণ হতে পারে তা হ'ল লগ 4 জে, সুতরাং আপনি সেইটিকেও স্থানান্তর করতে চাইতে পারেন


আপনি যদি জেরি / লিব / এক্সের সাথে চালককে অন্তর্ভুক্ত না করতে চান তবে আপনি সম্ভবত আপনার ধারক স্টার্টআপ ক্লাসপথে ড্রাইভারকে অন্তর্ভুক্ত করে একই ফলাফল পেতে পারেন। java -cp /path/to/jdbc-mysql-driver.jar:/path/to/container/bootstrap.jar ধারক. স্টার্ট
স্কট

3

এই জাতীয় ক্ষেত্রে প্রথম পদক্ষেপটি হ'ল জিসিকে পারমজেন থেকে ক্লাস আনড করার অনুমতি দেওয়া হয়েছে কিনা তা পরীক্ষা করা। প্রমিত জেভিএম এ ক্ষেত্রে বরং রক্ষণশীল - ক্লাসগুলি চিরকাল বেঁচে থাকার জন্য জন্মগ্রহণ করে। সুতরাং একবার লোড হয়ে গেলে, কোনও কোড তাদের আর ব্যবহার না করা সত্ত্বেও ক্লাসগুলি মেমোরিতে থাকে। অ্যাপ্লিকেশনটি গতিশীলভাবে প্রচুর ক্লাস তৈরি করে এবং উত্পন্ন ক্লাসগুলি দীর্ঘ সময়ের জন্য প্রয়োজন না হয় এটি সমস্যা হয়ে উঠতে পারে। এমন ক্ষেত্রে, জেভিএমকে শ্রেণীর সংজ্ঞাগুলি আনলোড করার অনুমতি দেওয়া সহায়ক হতে পারে। আপনার স্টার্টআপ স্ক্রিপ্টগুলিতে কেবল একটি কনফিগারেশন প্যারামিটার যুক্ত করে এটি অর্জন করা যেতে পারে:

-XX:+CMSClassUnloadingEnabled

ডিফল্টরূপে এটি মিথ্যাতে সেট করা থাকে এবং তাই এটি সক্ষম করতে আপনাকে জাভা বিকল্পগুলিতে নিম্নলিখিত বিকল্পটি স্পষ্টভাবে সেট করতে হবে। আপনি যদি CMSClassUnloadingEn وړ সক্ষম করেন, জিসি PermGen কে খুব সাফ করে দেবে এবং আর ব্যবহৃত না ক্লাসগুলি সরিয়ে ফেলবে। মনে রাখবেন যে এই বিকল্পটি কেবল তখনই কাজ করবে যখন UseConcMarkSweepGC নীচের বিকল্পটি ব্যবহার করে সক্ষম করা হবে। সুতরাং প্যারালালজিসি চালানোর সময় বা Godশ্বর বারণ করবেন না, সিরিয়াল জিসি, উল্লেখ করে নিশ্চিত করুন যে আপনি নিজের জিসি সিএমএসে সেট করেছেন:

-XX:+UseConcMarkSweepGC

3

টমকেটকে আরও মেমোরি বরাদ্দ করা সঠিক সমাধান নয়।

সঠিক সমাধানটি প্রসঙ্গটি বিনষ্ট ও পুনরায় তৈরি করার পরে একটি পরিচ্ছন্নতা করা (গরম স্থাপনা)। সমাধানটি হ'ল স্মৃতি ফাঁস বন্ধ করা।

যদি আপনার টমক্যাট / ওয়েব অ্যাপ্লিকেশন সার্ভার আপনাকে বলছে যে ড্রাইভার (জেডিবিসি) নিবন্ধন করতে ব্যর্থ হয়েছে, তবে তাদের নিবন্ধভুক্ত করুন। এটি স্মৃতি ফাঁস বন্ধ করবে।

আপনি একটি সার্লেটকন্টেক্সটলিস্টনার তৈরি করতে এবং এটি আপনার ওয়েব.এক্সএমএল এ কনফিগার করতে পারেন। সার্ভলেট কনটেক্সটলিস্টনার একটি নমুনা এখানে:

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

import com.mysql.jdbc.AbandonedConnectionCleanupThread;

/**
 * 
 * @author alejandro.tkachuk / calculistik.com
 *
 */
public class AppContextListener implements ServletContextListener {

    private static final Logger logger = Logger.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        logger.info("AppContextListener started");
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        logger.info("AppContextListener destroyed");

        // manually unregister the JDBC drivers
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();
            try {
                DriverManager.deregisterDriver(driver);
                logger.info(String.format("Unregistering jdbc driver: %s", driver));
            } catch (SQLException e) {
                logger.info(String.format("Error unregistering driver %s", driver), e);
            }

        }

        // manually shutdown clean up threads
        try {
            AbandonedConnectionCleanupThread.shutdown();
            logger.info("Shutting down AbandonedConnectionCleanupThread");
        } catch (InterruptedException e) {
            logger.warn("SEVERE problem shutting down AbandonedConnectionCleanupThread: ", e);
            e.printStackTrace();
        }        
    }
}

এবং এখানে আপনি এটি আপনার ওয়েব.এক্সএমএল এ কনফিগার করেছেন:

<listener>
    <listener-class>
        com.calculistik.mediweb.context.AppContextListener 
    </listener-class>
</listener>  

2

"তারা" ভুল কারণ আমি 6.০.২৯ চালাচ্ছি এবং সমস্ত অপশন সেট করার পরেও একই সমস্যা আছে। টিম হাওল্যান্ড যেমন উপরে বলেছে, এই বিকল্পগুলি কেবল অনিবার্যকেই বন্ধ করে দেয়। প্রতিবার আমি পুনরায় চালনার পরিবর্তে ত্রুটিটি আঘাত করার আগে তারা আমাকে 3 বার পুনরায় চালনার অনুমতি দেয়।


2

যদি আপনি Eclipse IDE এই পাচ্ছেন, পরামিতি নির্ধারণের পরে এমনকি --launcher.XXMaxPermSize, -XX:MaxPermSizeইত্যাদি, এখনও যদি আপনি একই ত্রুটি পাচ্ছেন, এটা সবচেয়ে সম্ভবত অন্ধকার যা কিছু দ্বারা ইনস্টল করা হত JRE- র একটা বগী সংস্করণ ব্যবহার করা হয় তৃতীয় পক্ষের অ্যাপ্লিকেশন এবং ডিফল্টতে সেট করুন। এই বাগি সংস্করণগুলি পার্মসাইজ প্যারামিটারগুলি গ্রহণ করে না এবং তাই আপনি যা কিছু সেট করুন না কেন, আপনি এখনও এই মেমরির ত্রুটিগুলি পেয়ে চলেছেন। সুতরাং, আপনার eclipse.ini এ নিম্নলিখিত পরামিতিগুলি যুক্ত করুন:

-vm <path to the right JRE directory>/<name of javaw executable>

এছাড়াও আপনি নিশ্চিত হয়ে নিন যে আপনি জাভাটির সঠিক সংস্করণে গ্রহটির পছন্দগুলিতে ডিফল্ট জেআরই সেট করেছেন।


2

আমার পক্ষে কাজ করার একমাত্র উপায় ছিল জে ররকিট জেভিএম। আমার MyEclipse 8.6 আছে।

জেভিএমের হিপ চলমান জাভা প্রোগ্রাম দ্বারা উত্পন্ন সমস্ত বস্তু সঞ্চয় করে। জাভা newঅবজেক্ট তৈরি করতে অপারেটর ব্যবহার করে এবং রান করার সময় নতুন বস্তুর জন্য মেমরি বরাদ্দ করা হয়। আবর্জনা সংগ্রহ হ'ল প্রোগ্রাম দ্বারা আর উল্লেখ করা হয় না এমন বস্তুগুলির দ্বারা থাকা মেমরিটিকে স্বয়ংক্রিয়ভাবে মুক্ত করার প্রক্রিয়া।


2

আমি একই সমস্যা ছিল। খনিটি জেডিকে 7 + ম্যাভেন 3.0.2 + স্ট্রুটস 2.0 + গুগল গুজ নির্ভরতা ইনজেকশন ভিত্তিক প্রকল্প।

আমি যখনই mvn clean packageকমান্ডটি চালানোর চেষ্টা করেছি তখন এটি নিম্নলিখিত ত্রুটিটি দেখিয়েছিল এবং "বিল্ড ব্যর্থ" ঘটেছিল

org.apache.maven.surefire.util.SurefireRiflectionException: java.lang.reflect.IvocationTargetException; নেস্টেড ব্যতিক্রম java.lang.reflect.IvocationTargetException: নাল java.lang.reflect.InvocationTargetException এর দ্বারা ঘটেছে: java.lang.OutOfMemoryError: PermGen স্পেস

আমি উপরের সমস্ত দরকারী টিপস এবং কৌশল চেষ্টা করেছিলাম তবে দুর্ভাগ্যক্রমে আমার পক্ষে কেউ কাজ করেনি। আমার জন্য যা কাজ করেছে তা নীচে পর্যায়ক্রমে বর্ণিত হয়েছে: =>

  1. আপনার pom.xML এ যান
  2. সন্ধান করা <artifactId>maven-surefire-plugin</artifactId>
  3. একটি নতুন <configuration>উপাদান এবং তারপরে <argLine>সাব এলিমেন্ট যুক্ত করুন যা -Xmx512m -XX:MaxPermSize=256mনীচে দেখানো হয়েছে তে পাস = =

<configuration> <argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> </configuration>

আশা করি এটি সাহায্য করবে, শুভ প্রোগ্রামিং :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.