"Java.lang.OutOfMemoryError: জাভা হ্যাপ স্পেস" ত্রুটিটি কীভাবে মোকাবেলা করবেন?


416

আমি জাভা 5 এ ক্লায়েন্ট-সাইড সুইং অ্যাপ্লিকেশন (গ্রাফিকাল ফন্ট ডিজাইনার) লিখছি । সাম্প্রতিককালে, আমি ত্রুটিযুক্ত হয়েছি কারণ আমি স্মৃতি ব্যবহারে রক্ষণশীল নই। ব্যবহারকারী সীমাহীন সংখ্যক ফাইল খুলতে পারে এবং প্রোগ্রামটি খোলা বস্তুগুলিকে মেমরিতে রাখে। একটি দ্রুত গবেষণার পরে আমি 5.0 জাভা ভার্চুয়াল মেশিনে এবং অন্যদের উইন্ডোজ মেশিনে জেভিএম সর্বাধিক হ্যাপের আকারটিকে ডিফল্ট করে বলে ইরগোনমিক্সকে পেয়েছি ।java.lang.OutOfMemoryError: Java heap space64MB

এই পরিস্থিতি দেওয়া, আমি এই প্রতিবন্ধকতা কিভাবে মোকাবেলা করা উচিত?

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

মেমরিটি মুক্ত করার জন্য আমি আমার কোডের কয়েকটি পুনরায় লিখতে পারি যাতে ঘন ঘন ফাইল সিস্টেমে অবজেক্ট থাকে (ডাটাবেস ব্যবহার একই জিনিস হয়) the এটি কাজ করতে পারে, তবে এটি সম্ভবত অনেক কাজ।

আপনি যদি আমাকে উপরের ধারণাগুলির বিবরণ বা স্বয়ংক্রিয় ভার্চুয়াল মেমরির মতো কিছু বিকল্পের গতিরূপে গাদা আকার বাড়িয়ে দিতে পারেন তবে তা দুর্দান্ত হবে।


MB৪ এমবি ডিফল্ট সর্বাধিক হ্যাপ আকারটি J2SE 5.0 এর আগে থেকে। জে 2 এসই 8.0 তথ্যের জন্য, ডকস.অরাকল . com/javase/ 8/ docs/technotes/guides/vm/… "আবর্জনা সংগ্রাহক এর্গোনমিক্স " দেখুন
অ্যান্ডি টমাস

যদি আপনি এখানে অবতরণ করেন কারণ প্রতিটি ওওএম প্রশ্নই এইটির সাথে জড়িত থাকে তবে নিশ্চিত হয়ে নিন যে আপনি এটি পরীক্ষা করে দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 299659/… এটি ওওমের আগে 'ঠিক সময়ে' মেমরির রেফারেন্সগুলি পরিষ্কার করার সমাধান সরবরাহ করে। সফ্টরাইফারেন্সস এমন একটি সরঞ্জাম হতে পারে যা আপনার প্রকৃত সমস্যা সমাধান করে।
স্টিভ স্টেইনার

উত্তর:


244

আপনি যে প্ল্যাটফর্মটি চালাচ্ছেন তা বিবেচনা না করে অবশেষে আপনার কাছে সর্বদা সসীম সর্বাধিক গাদা থাকে। উইন্ডোজ 32 বিটে এটি প্রায় 2GB(বিশেষভাবে গাদা নয় তবে প্রক্রিয়া অনুসারে মোট পরিমাণের মেমরি)। এটি কেবল ঘটে যায় যে জাভা ডিফল্টটিকে আরও ছোট করতে পছন্দ করে (সম্ভবত এটি যাতে প্রোগ্রামার এই প্রোগ্রামটি তৈরি করতে না পারে যেগুলি এই সমস্যাটির দিকে চালিত না করে এবং ঠিক কী করছে তা পরীক্ষা না করে পলাতক মেমরি বরাদ্দ রয়েছে) have

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

এই ক্ষেত্রে আপনি জাভা মেমরির প্রোফাইলার ব্যবহার করে আপনার প্রোগ্রামে কোন পদ্ধতিগুলি প্রচুর পরিমাণে অবজেক্ট বরাদ্দ করা হয় তা নির্ধারণ করতে পারেন এবং তারপরে সেগুলি আর রেফারেন্স করা হয়নি তা নিশ্চিত করার কোনও উপায় আছে কিনা বা প্রথমে তাদের বরাদ্দ না করার জন্য তা নির্ধারণ করতে পারেন। আমি অতীতে একটি বিকল্প যা ব্যবহার করেছি তা হ'ল "জেএমপি" http://www.khelekore.org/jmp/

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

সাধারণভাবে যদি আপনি গ্যারান্টি দিতে না পারেন যে আপনার প্রোগ্রামটি সীমাবদ্ধ পরিমাণে মেমরিতে চলবে (সম্ভবত ইনপুট আকারের উপর নির্ভর করে) আপনি সর্বদা এই সমস্যাটিতে চলে আসবেন। এই সমস্ত ক্লান্তির পরে কেবল আপনাকে ডিস্কের বাইরে ক্যাচিং অবজেক্টগুলি খতিয়ে দেখতে হবে this এই মুহুর্তে আপনার কোনও কিছুর জন্য "আমার মেমরির এক্সজিবি দরকার" বলার খুব যুক্তিসঙ্গত কারণ থাকতে হবে এবং আপনি উন্নতি করে এটিকে ঘিরে কাজ করতে পারবেন না আপনার অ্যালগরিদম বা মেমরি বরাদ্দ নিদর্শন। সাধারণত এটি সাধারণত বড় ডেটাসেটগুলিতে অপারেটিং অ্যালগরিদমগুলির ক্ষেত্রে (যেমন একটি ডাটাবেস বা কিছু বৈজ্ঞানিক বিশ্লেষণ প্রোগ্রাম) এবং তারপরে ক্যাশে এবং মেমরি ম্যাপ করা আইওর মতো কৌশলগুলি কার্যকর হয়ে ওঠে।


6
ওপেনজেডিকে এবং ওরাকলজেডিকে প্রোফাইলার - jvisualvm বান্ডিল করেছে। আপনি যদি আরও সুবিধাগুলি চান তবে আমি বাণিজ্যিক আপনারকিটকে পরামর্শ দেব।
পেটর গ্ল্যাডকিখ

121

কমান্ড-লাইন বিকল্পের সাহায্যে জাভা চালান -Xmxযা গাদাটির সর্বোচ্চ আকার নির্ধারণ করে ।

বিশদ জন্য এখানে দেখুন


3
চিরতরে এই পরামিতিটি কীভাবে সেট করবেন? কারণ আমি গ্রেডলু এসেম্বল কমান্ডটি ব্যবহার করছি।
ডাঃ জ্যাকি

2
রান-> রান কনফিগারেশন-> আর্গুমেন্টে ক্লিক করুন-> ভিএম আর্গুমেন্টের ভিতরে -Xms1g -Xmx2g টাইপ করুন
সিং

2
এটাই আসল উত্তর।
এন সি সি সি

85

আপনার প্রকল্পে কত গাদা জায়গা চায় তা আপনি প্রতি প্রকল্পে নির্দিষ্ট করতে পারেন

নিম্নলিখিতটি হলিপস হেলিওস / জুনো / কেপলারের জন্য :

মাউসের ডানদিকে ক্লিক করুন

 Run As - Run Configuration - Arguments - Vm Arguments, 

তারপরে এটি যুক্ত করুন

-Xmx2048m

1
হাই বিঘোস্টকিম এবং কুওংহুইটো, যেখানে "আর্গুমেন্টস" আছে .. আমি রান কনফিগারেশন পর্যন্ত দেখতে সক্ষম হয়েছি। আমাকে বলুন। আমার Gmail থেকে প্রায় 2000 টি পরিচিতি ডাউনলোড এবং সঞ্চয় করতে হবে। স্মৃতি ব্যতিক্রম না হওয়ার কারণে এটি ক্রাশ হয়েছে
AndroidRaji

@ এন্ড্রোইজিজি: আপনি জাভা ক্লাসে আপনার মাউসটি ডানদিকে ক্লিক করুন যা একটি চলমান মেইন রয়েছে (এটি "পাবলিক স্ট্যাটিক ভয়েড মেইন (স্ট্রিং [] আরগস" ") রয়েছে, তারপরে রান এন্ড - রান কনফিগারেশন নির্বাচন করুন। তারপরে "আর্গুমেন্টস" হ'ল ট্যাবটি মূলের পরে (আপনি ট্যাবগুলি মেইন, আর্গুমেন্টস, জেআরই, ক্লাসপাথ, উত্স, পরিবেশ, সাধারণ) দেখুন।
কুওংহুইটো

47

গাদা আকার বৃদ্ধি কোনও "স্থির" নয় এটি একটি "প্লাস্টার", 100% অস্থায়ী। এটি আবার কোথাও ক্রাশ হবে। এই সমস্যাগুলি এড়াতে, উচ্চ কার্যকারিতা কোড লিখুন।

  1. যেখানে সম্ভব স্থানীয় ভেরিয়েবল ব্যবহার করুন।
  2. নিশ্চিত হয়ে নিন যে আপনি সঠিক অবজেক্টটি নির্বাচন করেছেন (উদাহরণ: স্ট্রিং, স্ট্রিংবফার এবং স্ট্রিংবিল্ডারের মধ্যে নির্বাচন)
  3. আপনার প্রোগ্রামের জন্য একটি ভাল কোড সিস্টেম ব্যবহার করুন (উদাহরণস্বরূপ: স্ট্যাটিক ভেরিয়েবল ভিএস নন স্ট্যাটিক ভেরিয়েবলগুলি ব্যবহার করে)
  4. অন্যান্য কোড যা আপনার কোডে কাজ করতে পারে।
  5. বহু থ্রেডিংয়ের সাথে সরানোর চেষ্টা করুন

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

@ আশ: হ্যাঁ, প্লাস্টারগুলি সন্ধান করার পরিবর্তে মূল সমস্যাটি সমাধান করুন।
লেবু রস

জাভাতে আবর্জনা সংগ্রহ এবং মেমরি পরিচালনার পদ্ধতিটি তার পূর্বসূরীদের এই সমস্ত ম্যালোক-ডেলোক জটিলতাগুলি সমাধান করার কথা ছিল :( অবশ্যই আমি এই উত্তরের সাথে সম্পূর্ণরূপে একমত, এটি ডিফল্টরা লীন তথ্যগুলির সাথে কোড লিখতে সহজ করে না এটি কেবল লজ্জার বিষয়) এমন কাঠামো যেগুলি ASAP সাফ করা হয় Dav
দাভোস

31

বড় ক্যাভিয়েট ---- আমার অফিসে, আমরা সন্ধান করছিলাম যে (কিছু উইন্ডোজ মেশিনে) আমরা জাভা হ্যাপের জন্য 512 মিটারের বেশি বরাদ্দ করতে পারি না। এটি সেই কয়েকটি মেশিনে ক্যাস্পারস্কি অ্যান্টি-ভাইরাস পণ্য ইনস্টল করার কারণে ঘটেছে। এই এভি পণ্যটি আনইনস্টল করার পরে, আমরা পেয়েছি যে আমরা কমপক্ষে 1.6gb বরাদ্দ করতে পারি, অর্থাত -Xmx1600m(এম বাধ্যতামূলক অন্যান্য বুদ্ধি এটি আরও একটি ত্রুটি "খুব ছোট প্রাথমিক গাদা") এর দিকে পরিচালিত করবে।

অন্যান্য এভি পণ্যের সাথে এটি ঘটে কিনা ধারণা নেই তবে সম্ভবত এটি ঘটছে কারণ এভি প্রোগ্রামটি প্রতিটি ঠিকানার জায়গায় মেমরির একটি ছোট ব্লক সংরক্ষণ করে, যার ফলে একটিমাত্র সত্যই বড় বরাদ্দ রোধ করা হয়।


22

ভিএম যুক্তি আমার পক্ষে গ্রহনে কাজ করেছিল। আপনি যদি গ্রিপস সংস্করণ 3.4 ব্যবহার করছেন তবে নিম্নলিখিতটি করুন

Run --> Run Configurations -->মাভেন বিল্ডের অধীনে প্রকল্পটি নির্বাচন করতে যান -> তারপরে "জেআরই" ট্যাবটি নির্বাচন করুন -> তারপরে প্রবেশ করুন -Xmx1024m

বিকল্পভাবে আপনি Run --> Run Configurations --> select the "JRE" tab -->তখন প্রবেশ করতে পারেন -Xmx1024m

এটি সমস্ত বিল্ড / প্রকল্পগুলির জন্য মেমরির হিপ বাড়িয়ে তুলবে। উপরের মেমরির আকার 1 জিবি। আপনি যেভাবে চান সেটিকে অনুকূল করতে পারেন।


18

হ্যাঁ, -Xmxআপনি আপনার JVM এর জন্য আরও মেমরি কনফিগার করতে পারেন। আপনি মেমরি ফাঁস করবেন না বা অপচয় করবেন না তা নিশ্চিত হওয়ার জন্য। আপনার মেমরির খরচ বিশ্লেষণ করতে একটি হিপ ডাম্প নিন এবং গ্রহণ করুন মেমরি বিশ্লেষক


JVMJ9VM007E কমান্ড-লাইন বিকল্পটি অপরিচিত:-এক্সএমএক্স জাভা ভার্চুয়াল মেশিন তৈরি করতে পারেনি। ডাউনভোট
ফিলিপ রেগো

17

আমি ওরাকল ঝামেলার শুটিং থেকে সুপারিশ যুক্ত করতে চাই নিবন্ধ ।

থ্রেড থ্রেড নাম: java.lang.OutOfMemoryError: জাভা হিপ স্পেস

জাভা হিপ স্পেসটি নির্দেশ করে বিশদ বার্তা জাভা হ্যাপে বরাদ্দ করা যায়নি। এই ত্রুটিটি অগত্যা কোনও মেমরি ফাঁস বোঝায় না

সম্ভাব্য কারণ:

  1. সাধারণ কনফিগারেশন সমস্যা , যেখানে নির্দিষ্ট গাদা আকার প্রয়োগের জন্য অপর্যাপ্ত।

  2. অ্যাপ্লিকেশন অজান্তেই অবজেক্টগুলির রেফারেন্স ধারণ করে এবং এটি বস্তুগুলি আবর্জনা সংগ্রহ হতে বাধা দেয়।

  3. চূড়ান্তকরণকারীর অতিরিক্ত ব্যবহার

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

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

একটি পরিস্থিতি যা এই পরিস্থিতির কারণ হতে পারে তা হ'ল যখন কোনও অ্যাপ্লিকেশন উচ্চ-অগ্রাধিকারের থ্রেড তৈরি করে যা চূড়ান্তকরণের সারিটিকে এমন হারে বাড়িয়ে তোলে যা চূড়ান্তকরণকারী থ্রেডটি সেই সারিতে পরিবেশন করছে তার হারের চেয়ে দ্রুত।


9

নীচের পদক্ষেপগুলি অনুসরণ করুন:

  1. catalina.shটমকাট / বিন থেকে খোলা ।

  2. JAVA_OPTS এ পরিবর্তন করুন

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m 
    -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
  3. আপনার টমক্যাটটি পুনরায় চালু করুন


8

আমি অন্য কোথাও পড়েছি যে আপনি চেষ্টা করতে পারেন - java.lang.OutOfMemoryError ধরুন এবং ক্যাচ ব্লকে, আপনি যে সমস্ত সংস্থান জানেন যে আপনি প্রচুর স্মৃতি ব্যবহার করতে পারেন, সংযোগগুলি ঘনিষ্ঠ করতে পারেন এবং এরপরে ছেড়ে দিতে পারেন, তারপরে একটি করুন System.gc() যা যা চেষ্টা করুন তা আবার চেষ্টা করুন আপনি করতে যাচ্ছিলেন।

অন্য উপায় এটি যদিও, আমি জানি না এটি কাজ করবে কিনা, তবে আমি বর্তমানে এটি পরীক্ষা করছি যে এটি আমার অ্যাপ্লিকেশনটিতে কাজ করবে কিনা।

আইডিয়াটি হ'ল System.gc () কে কল করে আবর্জনা সংগ্রহ করা যা ফ্রি মেমরি বৃদ্ধি করে। মেমোরি গাবলিং কোড কার্যকর করার পরে আপনি এটি পরীক্ষা করে রাখতে পারেন।

//Mimimum acceptable free memory you think your app needs
long minRunningMemory = (1024*1024);

Runtime runtime = Runtime.getRuntime();

if(runtime.freeMemory()<minRunningMemory)
 System.gc();

6
সাধারণভাবে আমি ভাবি যে জেভিএম আউটআফমিউরিওর ফেলে দেওয়ার চেয়ে জঞ্জাল সংগ্রহ (জিসি) পছন্দ করবে। স্পষ্টভাবে আউটআউফমিউরিওর এর পরে System.gc () কল করা সম্ভবত কিছু ভিএম / কনফিগারেশনে সহায়তা করতে পারে তবে সাধারণ ক্ষেত্রে এটি খুব ভালভাবে কাজ করবে বলে আমি আশা করব না। তবে অপ্রয়োজনীয় অবজেক্টের রেফারেন্স বাদ দেওয়া প্রায় সব ক্ষেত্রেই অবশ্যই সাহায্য করবে।
মাইক ক্লার্ক

6
সরাসরি কোড থেকে @ এমওয়ানগি কলিং সিস্টেম.gc () সাধারণত একটি খারাপ ধারণা। এটি জেভিএমকে কেবল একটি পরামর্শ যে জিসি সঞ্চালিত হওয়া উচিত, তবে এটি সম্পাদিত হবে তার কোনও গ্যারান্টি নেই

7

OutOfMemoryErrorজাভা সমাধানের সহজ উপায় হল জেভিএম বিকল্পগুলি ব্যবহার করে সর্বাধিক গাদা আকার বাড়ানো-Xmx512M স্তরের , এটি তত্ক্ষণাত আপনার আউটআফমিউরিওর সমাধান করবে। প্রকল্পটি নির্মাণের সময় আমি যখন ইক্লিপস, মাভেন বা এএনটি-তে আউটআফমিউরির এরর পাই তখন এটি আমার পছন্দসই সমাধান কারণ প্রকল্পের আকারের উপর ভিত্তি করে আপনি সহজেই মেমোরির বাইরে চলে যেতে পারেন।

এখানে জেভিএমের সর্বাধিক স্তরের আকার বাড়ানোর উদাহরণ রয়েছে, এছাড়াও আপনি যদি আপনার জাভা অ্যাপ্লিকেশনটিতে হ্যাপের আকার নির্ধারণ করেন তবে এক্সএমএক্স থেকে-এক্সএমএস রেশন 1: 1 বা 1: 1.5 রাখুন আরও ভাল।

export JVM_ARGS="-Xms1024m -Xmx1024m"

রেফারেন্স লিংক


1
আমাদের কেন তাদের 1: 1 বা 1: 1.5 অনুপাতের মধ্যে রাখা দরকার তা ধারণা?
আর্নেস্তো

7

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

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

-XX:ParallelGCThreads=8
-XX:+CMSClassUnloadingEnabled
-XX:InitiatingHeapOccupancyPercent=70
-XX:+UnlockDiagnosticVMOptions
-XX:+UseConcMarkSweepGC
-Xms512m
-Xmx8192m
-XX:MaxPermSize=256m (in java 8 optional)

উদাহরণস্বরূপ: উত্পাদন মোডের জন্য পছন্দনীয় সেটিংসের জন্য লিনাক্স প্ল্যাটফর্মে।

এইভাবে সার্ভারটি ডাউনলোড এবং কনফিগার করার পরে http://www.ehowstuff.com/how-to-install-and-setup-apache-tomcat-8-on-centos-7-1-rhel-7/

ফোল্ডার / অপ্ট / টমক্যাট / বিন / 1 তে setenv.sh ফাইলটি তৈরি করুন

   touch /opt/tomcat/bin/setenv.sh

2. পছন্দনীয় মোড সেট করার জন্য এই প্যারামগুলি খুলুন এবং লিখুন।

nano  /opt/tomcat/bin/setenv.sh 

export CATALINA_OPTS="$CATALINA_OPTS -XX:ParallelGCThreads=8"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+CMSClassUnloadingEnabled"
export CATALINA_OPTS="$CATALINA_OPTS -XX:InitiatingHeapOccupancyPercent=70"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UnlockDiagnosticVMOptions"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseConcMarkSweepGC"
export CATALINA_OPTS="$CATALINA_OPTS -Xms512m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx8192m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxMetaspaceSize=256M"

3।service tomcat restart

মনে রাখবেন যে জেভিএম কেবল গাদা থেকে বেশি স্মৃতি ব্যবহার করে। উদাহরণস্বরূপ জাভা পদ্ধতিগুলি, থ্রেড স্ট্যাকগুলি এবং নেটিভ হ্যান্ডলগুলি মেমরির গাদা থেকে পৃথক পৃথকভাবে জেভিএম অভ্যন্তরীণ ডেটা স্ট্রাকচার বরাদ্দ করা হয়।


7

আমি জাভা হ্যাপ সাইজ থেকে একই সমস্যার মুখোমুখি হয়েছি।

আপনি জাভা 5 (1.5) ব্যবহার করছেন তবে আমার দুটি সমাধান রয়েছে।

  1. কেবল jdk1.6 ইনস্টল করুন এবংগ্রহণের পছন্দগুলিতে যান এবং জাভ 1 1.6 এর জেরের পথটি ইনস্টল করুন as

  2. আপনার ভিএম যুক্তি পরীক্ষা করুন এবং এটি যাই হোক না কেন তা হতে দিন। ভিএম আর্গুমেন্টে উপস্থিত সমস্ত আর্গুমেন্টের নীচে কেবল একটি লাইন যুক্ত করুন -Xms512m -Xmx512m -XX: ম্যাকস্পার্মসাইজ = ... মি (192 মিটার)।

আমি মনে করি এটি কার্যকর হবে ...


7

যদি রানটাইমের সময় আপনার স্মৃতি ব্যবহারের নিরীক্ষণ প্রয়োজন হয় তবে java.lang.managementপ্যাকেজটি MBeansআপনার ভিএম-তে মেমরি পুলগুলি (যেমন, এডেন স্পেস, টেনারড জেনারেশন ইত্যাদি), এবং আবর্জনা সংগ্রহের আচরণগুলি পর্যবেক্ষণ করতে ব্যবহার করে offers

এই এমবিয়ানদের দ্বারা নির্ধারিত ফ্রি হ্যাপ স্পেসটি জিসি আচরণের উপর নির্ভর করে ব্যাপকভাবে পরিবর্তিত হবে, বিশেষত যদি আপনার অ্যাপ্লিকেশন প্রচুর পরিমাণে অবজেক্ট তৈরি করে যা পরে জিসি-এড হয়। একটি সম্ভাব্য পন্থা হ'ল প্রতিটি পূর্ণ-জিসির পরে ফ্রি হ্যাপ স্পেসটি পর্যবেক্ষণ করা, যা আপনি অবজেক্ট অবজেক্টের মাধ্যমে স্মৃতি মুক্ত করার বিষয়ে সিদ্ধান্ত নিতে ব্যবহার করতে পারেন।

শেষ পর্যন্ত, আপনার সেরা বেটটি যতটা সম্ভব আপনার স্মৃতি ধারণাকে সীমাবদ্ধ করা যতক্ষণ না পারফরম্যান্স গ্রহণযোগ্য থাকে। পূর্ববর্তী মন্তব্যে যেমন উল্লেখ করা হয়েছে, মেমরি সর্বদা সীমাবদ্ধ থাকে তবে আপনার অ্যাপ্লিকেশনটিতে মেমরির ক্লান্তি মোকাবেলার জন্য একটি কৌশল থাকা উচিত।


5

নোট করুন যে আপনার যদি কোনও স্থাপনার পরিস্থিতিতে এটি প্রয়োজন হয় তবে জাভা ওয়েবস্টার্ট (একটি "অনডস্ক" সংস্করণ ব্যবহার করে বিবেচনা করুন, জাভা 6u10 এবং পরবর্তীকালে সম্ভব নয়) এটি আপনাকে ক্রুশে জেভিএম-তে বিভিন্ন যুক্তি নির্দিষ্ট করার অনুমতি দেয় প্ল্যাটফর্ম উপায়

অন্যথায় আপনার একটি অপারেটিং সিস্টেম নির্দিষ্ট প্রবর্তক প্রয়োজন যা আপনার প্রয়োজনীয় আর্গুমেন্টগুলি সেট করে।


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

1

যদি এই সমস্যাটি ওয়াইল্ডফ্লাই 8 এবং জেডি কে 1.8 তে ঘটে থাকে তবে আমাদের পার্মজেন সেটিংসের পরিবর্তে ম্যাক্সমেটাস্পেস সেটিংস নির্দিষ্ট করতে হবে।

উদাহরণস্বরূপ আমাদের বন্যফ্লাইয়ের setenv.sh ফাইলটিতে কনফিগারেশন নীচে যুক্ত করতে হবে। JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=256M"

আরও তথ্যের জন্য, দয়া করে ওয়াইল্ডফ্লাই হিপ ইস্যুটি দেখুন


1

নেটবিন সম্পর্কিত, আপনি সমস্যাটি সমাধানের জন্য সর্বোচ্চ গাদা আকার নির্ধারণ করতে পারেন।

'রান' এ যান, তারপরে -> 'পপ আপ কনফিগারেশন সেট করুন' -> এর পপ আপ উইন্ডোটির 'কাস্টমাইজ' -> 'রান' -> 'ভিএম অপশন' -> '-Xms2048m -Xmx2048m' পূরণ করুন ।


1

যদি আপনি বরাদ্দ করা এবং অবজেক্টের রেফারেন্সগুলি রাখা চালিয়ে যান তবে আপনার যে পরিমাণ পরিমাণ মেমরি রয়েছে তা পূরণ করবেন।

একটি বিকল্প হ'ল স্বচ্ছ ফাইলটি বন্ধ করুন এবং খুলুন যখন তারা ট্যাবগুলি স্যুইচ করেন (আপনি কেবলমাত্র ফাইলটিতে একটি পয়েন্টার রাখেন এবং যখন ব্যবহারকারী ট্যাবটি স্যুইচ করে, আপনি সমস্ত বস্তুটি বন্ধ করে পরিষ্কার করেন ... এটি ফাইলকে পরিবর্তনকে ধীর করে দেবে ... তবে ...) এবং সম্ভবত 3 বা 4 টি ফাইল মেমোরিতে রাখুন।

আপনার যা করা উচিত তা হ'ল, যখন ব্যবহারকারী কোনও ফাইল খোলেন, লোড করুন এবং যে কোনও আউট-অফ মেমরিরির বাধা দিন, তারপরে (ফাইলটি খোলার পক্ষে সম্ভব নয়) সেই ফাইলটি বন্ধ করুন, তার বিষয়গুলি পরিষ্কার করুন এবং ব্যবহারকারীকে সতর্ক করা উচিত যে তিনি অব্যবহৃত হওয়া উচিত should নথি পত্র.

ভার্চুয়াল মেমরিটি গতিশীলভাবে প্রসারিত করার আপনার ধারণাটি সমস্যার সমাধান করে না, কারণ মেশিনটি সংস্থানসমূহের মধ্যে সীমাবদ্ধ, সুতরাং আপনার উচিত যত্নশীল এবং মেমরির সমস্যাগুলি হ্যান্ডেল করা (বা কমপক্ষে, তাদের সাথে সতর্ক থাকুন)।

মেমরি ফাঁস দিয়ে আমি বেশ কয়েকটি ইঙ্গিত দেখেছি:

-> মনে রাখবেন যে আপনি যদি কোনও সংগ্রহের মধ্যে কিছু রেখে দেন এবং এরপরে এটি ভুলে যান তবে আপনার কাছে এখনও এর একটি দৃ reference় রেফারেন্স রয়েছে, তাই সংগ্রহটি বাতিল করুন, এটি পরিষ্কার করুন বা এটি দিয়ে কিছু করুন ... না হলে আপনি খুঁজে পাবেন মেমরি ফাঁস খুঁজে পাওয়া কঠিন।

-> হতে পারে, দুর্বল রেফারেন্স (দুর্বলতাশ্যাপ ...) সহ সংগ্রহগুলি ব্যবহার করা স্মৃতি সমস্যার ক্ষেত্রে সহায়তা করতে পারে তবে আপনাকে অবশ্যই তা করতে হবে এটিকে কারণ আপনি দেখতে পাচ্ছেন যে অবজেক্টটি আপনি খুঁজছেন তা সংগ্রহ করা হয়েছে।

-> অন্য একটি ধারণা আমি খুঁজে পেয়েছি হ'ল একটি অবিচ্ছিন্ন সংগ্রহ বিকাশ করা যা ডাটাবেস অবজেক্টগুলিতে স্বল্পভাবে ব্যবহৃত এবং স্বচ্ছভাবে লোড হওয়া সঞ্চয় করে। এটি সম্ভবত সেরা পন্থা হবে ...


0

যদি সমস্ত কিছু ব্যর্থ হয় তবে সর্বোচ্চ গাদা আকার বাড়ানো ছাড়াও অদলবদলের আকার বাড়ানোর চেষ্টা করুন। লিনাক্সের জন্য, এখন পর্যন্ত, সম্পর্কিত নির্দেশাবলী https://linuxize.com/post/create-a-linux-swap-file/ এ পাওয়া যাবে ।

আপনি যেমন একটি এম্বেড থাকা প্ল্যাটফর্মে বড় কিছু সংকলন করতে পারলে এটি সহায়তা করতে পারে।

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