ম্যাভেন আউট অফ মেমরি বিল্ড ব্যর্থ


90

আজকের হিসাবে, আমার মাভেন সংকলন ব্যর্থ।

[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO]  at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO]  at java.lang.String.<init>(String.java:203)
[INFO]  at java.lang.String.substring(String.java:1877)

[ERROR] স্মৃতিশক্তি বাইরে; মেমরির পরিমাণ বাড়ানোর জন্য, প্রারম্ভকালে -xmx পতাকাটি ব্যবহার করুন (জাভা-এক্সএমএক্স 128 এম ...)

গতকাল হিসাবে আমি সফলভাবে একটি মাভেন সংকলন চালিয়েছি।

আজ অবধি, আমি আমার গাদাটি 3 গিগাবাইট পর্যন্ত ছড়িয়ে দিয়েছি । এছাড়াও, আমি কেবল কোডের 2-3 টি ছোটখাট রেখা পরিবর্তন করেছি, তাই আমি এই 'মেমরির বাইরে' ত্রুটিটি বুঝতে পারি না।

vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m

সম্পাদনা: আমি আমার ব্যর্থ মডিউলটির pom.xML পরিবর্তন করে পোস্টারের মন্তব্যটি চেষ্টা করেছি। তবে আমি একই মেভেন বিল্ড ত্রুটি পেয়েছি।

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <fork>true</fork>
            <meminitial>1024m</meminitial>
            <maxmem>2024m</maxmem>
       </configuration>
    </plugin>

4
আপনি স্ট্যাকট্রেস আরও সরবরাহ করতে পারেন? আমি স্ট্রিং ইনিশিয়ালেশনের স্মৃতিশক্তি ফুরিয়ে যাওয়ার কারণ হতে পারে তা জানতে আগ্রহী। MAVEN_OPTS এ গাদা আকার নির্ধারণ করা যেতে যাওয়ার মত শোনায় তবে আমার ধারণা হ'ল কোথাও একটি হাস্যকরভাবে বড় স্ট্রিং রয়েছে যা আপনি সম্ভবত যথেষ্ট পরিমাণে বরাদ্দ করছেন না -Xmx
এডওয়ার্ড স্যামসন

উত্তর:


139

আপনি কোন ধরণের 'ওয়েব' মডিউলটির কথা বলছেন? এটি কি সাধারণ যুদ্ধ এবং প্যাকেজিং টাইপের যুদ্ধ রয়েছে?

আপনি যদি গুগলের ওয়েব টুলকিট (জিডব্লিউটি) ব্যবহার না করে থাকেন তবে আপনাকে কোনও সরবরাহ করার দরকার নেই gwt.extraJvmArgs

সংকলন প্রক্রিয়া জোর দেওয়া সেরা ধারণা নাও হতে পারে, কারণ এটি একটি দ্বিতীয় প্রক্রিয়া শুরু করে যা MAVEN_OPTSপুরোপুরি উপেক্ষা করে এবং বিশ্লেষণকে আরও কঠিন করে তোলে।

সুতরাং আমি MAVEN_OPTS সেট করে এক্সএমএক্স বাড়ানোর চেষ্টা করব

export MAVEN_OPTS="-Xmx3000m"

এবং একটি পৃথক প্রক্রিয়া সংকলক কাঁটাচামচ করবেন না

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
   </configuration>
</plugin>

ক্রমবর্ধমানের -XX:MaxPermSize=512mপ্রয়োজন হবে না কারণ যদি পার্ম আকার সমস্যার কারণ হয় তবে আমি ত্রুটিটি আশা করবjava.lang.OutOfMemoryError: PermGen space

যদি এটি আপনার সমস্যার সমাধান না করে তবে আপনি যুক্ত করে আরও বিশ্লেষণের জন্য হ্যাপ ডাম্প তৈরি করতে পারেন -XX:+HeapDumpOnOutOfMemoryError। সংকলন চলাকালীন jvm এর সাথে সংযোগ স্থাপনের জন্য jvm এর স্তূপের অভ্যন্তরে কী চলছে তা আপনি jvaso বিন ডিরেক্টরিতে jconsole.exe ব্যবহার করতে পারেন।

আর একটি আইডিয়া (বোকা হতে পারে) যা আমার কাছে এসেছিল, আপনার মেশিনের ভিতরে কি যথেষ্ট পরিমাণে র‌্যাম রয়েছে? মেমরির আকার নির্ধারণ করা দুর্দান্ত, তবে যদি আপনার হোস্টটিতে কেবল 4 জিবি থাকে এবং তবে আপনার সমস্যা হতে পারে যে জাভা সংজ্ঞায়িত মেমরিটি ব্যবহার করতে সক্ষম নয় কারণ এটি ইতিমধ্যে ওএস, জাভা, এমএস-অফিস দ্বারা ব্যবহৃত হয়েছে ...


আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. কাঁটাযুক্ত জেভিএম অপসারণ করার জন্য আপনার পরামর্শটি কি 'ম্যাভেন-শিফারফায়ার-প্লাগইন?' আমি আপনার MAVEN_OPTS মেমরিটি 3000-এ টান দেওয়ার জন্য আপনার পরামর্শটি চেষ্টা করেছি My আমার খাঁটি-সংকলকটিতে একটি কাঁটাযুক্ত জেভিএমের জন্য কোনও সেটিংস নেই, তাই আমাকে সেখানে কোনও পরিবর্তন করার দরকার নেই। এবং হ্যাঁ, আমার অতিথি ভিএম এর 4 গিগাবাইট র‌্যাম রয়েছে। হোস্ট মেশিনটিতে 8 জিবি র‌্যাম রয়েছে।
কেভিন মেরিডেথ

4
যাইহোক, mvn বিল্ড আপনার পরামর্শ দিয়ে আবার ব্যর্থ হয়েছে।
কেভিন মেরিডেথ

4
সাধারণত আমি যতক্ষণ না এটিকে চালিত না করে প্রক্রিয়া কাঁটাচামচ এড়ানোর চেষ্টা করি। যদি আপনার সিস্টেমে কেবল 4 জিবি থাকে তবে by 1 জিবি ওএস দ্বারা ব্যবহৃত হয়। সুতরাং আপনার 3 জিবি বিশ্রাম আছে। যদি ম্যাভেনটি Xms = 1GB দিয়ে শুরু হয় তবে ফ্রি মেমরির বাকী 2GB of এরপরে সংকলক কাঁটাটি Xms = 1GB দিয়ে শুরু হয়েছিল .... যা ফ্রি মেমরিটিকে 1GB এ হ্রাস করে। এখন আপনি পার্মজেন মেমোরি 128MB, কাঁটাযুক্ত ফেইলসেফ-প্লাগইন প্রক্রিয়াটি বিয়োগ করতে পারবেন ... আপনি দেখতে পাচ্ছেন যে আপনার এক্সএমএক্স সেটিংস সম্ভবত জেভিএম হিসাবে কখনও ব্যবহার করা যাবে না কারণ মেমরিটি সহজ নয়। আপনি জে কনসোল ব্যবহার করার চেষ্টা করেছেন? এবং হিপডাম্পঅনআউটআউট মেমরিরির?
ভ্যাচ

আমি আমার MAVEN_OPTS থেকে Xms1024m সরিয়েছি, তবে এমভিএন বিল্ড এখনও ব্যর্থ হয়েছে। আমি আমার MAVEN_OPTS- এ "হিপডাম্প ..." যুক্ত করেছি, তবে ডাম্পটি কোথায় মুদ্রিত হবে তা আমি নিশ্চিত নই। এখন JConsole এ খুঁজছেন।
কেভিন মেরেডিথ

ডাম্পগুলি jvms ডিরেক্টরিতে
প্লাস হয়

37

MAVEN_OPTSপ্রয়োজনীয় জেভিএম বিকল্পগুলি তৈরি করতে মাভেনকে পাস করতে সাধারণ পরিবেশের পরিবর্তনশীলের চেয়ে আর একটি বিকল্প উল্লেখ করতে দেরি করে জবাব দেওয়া।

ম্যাভেন ৩.৩.১ থেকে যেহেতু আপনার .mvnকাছে সংশ্লিষ্ট প্রকল্পের অংশ হিসাবে একটি ফোল্ডার এবং এই jvm.configজাতীয় বিকল্পের জন্য নিখুঁত জায়গা হিসাবে একটি ফাইল থাকতে পারে।

দুটি নতুন alচ্ছিক কনফিগারেশন ফাইল .mvn/jvm.configএবং .mvn/maven.config, প্রকল্প উত্স গাছের ভিত্তি ডিরেক্টরিতে অবস্থিত। যদি উপস্থিত থাকে তবে এই ফাইলগুলি ডিফল্ট jvm এবং maven বিকল্প সরবরাহ করবে। কারণ এই ফাইলগুলি প্রকল্প উত্স গাছের অংশ, তাই তারা সমস্ত প্রকল্পের চেকআউটগুলিতে উপস্থিত থাকবে এবং প্রতিবার প্রকল্পটি নির্মাণের সময় স্বয়ংক্রিয়ভাবে ব্যবহৃত হবে।

সরকারী রিলিজ নোটের অংশ হিসাবে

মাভেনে প্রতি প্রকল্প বেসে জেভিএম কনফিগারেশন সংজ্ঞায়িত করা সহজ নয়। পরিবেশের পরিবর্তনশীল MAVEN_OPTSএবং এর ব্যবহারের ভিত্তিতে বিদ্যমান প্রক্রিয়াটি ${user.home}/.mavenrcপ্রকল্পের অংশ না হওয়ার অপূর্ণতা সহ একটি অন্য বিকল্প।

এই প্রকাশের সাথে শুরু করে আপনি ${maven.projectBasedir}/.mvn/jvm.configফাইলের মাধ্যমে জেভিএম কনফিগারেশন সংজ্ঞায়িত করতে পারবেন যার অর্থ আপনি প্রতি প্রকল্প বেসে আপনার বিল্ডের জন্য বিকল্পগুলি সংজ্ঞায়িত করতে পারেন। এই ফাইলটি আপনার প্রকল্পের অংশ হয়ে উঠবে এবং আপনার প্রকল্পের পাশাপাশি পরীক্ষা করা হবে। তাই কোন জন্য আর প্রয়োজন MAVEN_OPTS, .mavenrcফাইল। সুতরাং উদাহরণস্বরূপ আপনি যদি ${maven.projectBasedir}/.mvn/jvm.configফাইলটিতে নিম্নলিখিত JVM বিকল্পগুলি রাখেন :

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

এই পদ্ধতির মূল সুবিধাটি হ'ল কনফিগারেশনটি সংশ্লিষ্ট প্রকল্পের সাথে পৃথক করে পুরো বিল্ডে প্রয়োগ করা MAVEN_OPTSহয় এবং একই প্রকল্পে কাজ করা অন্যান্য বিকাশকারীদের তুলনায় কম ভঙ্গুর (সেট করতে ভুলে যাওয়া)।
অধিকন্তু, বহু-মডিউল প্রকল্পের ক্ষেত্রে বিকল্পগুলি সমস্ত মডিউলগুলিতে প্রয়োগ করা হবে।


4
মনে রাখবেন যে আপনি
জেডিকে

15

লোয়েড 512 এমবি র‌্যাম ভিপিএস এবং ভাল সিপিইউ ব্যবহার করে "ক্লিন ইনস্টল" সংকলনের চেষ্টা করতে আমার একই সমস্যা হয়েছে got আউটআফমেমোরি চালান এবং স্ক্রিপ্টটি পুনরাবৃত্তি করলেন।

আমি ব্যবহার export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"এবং কাজ।

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


11

বিকল্প যুক্ত করুন

-XX:MaxPermSize=512m

MAVEN_OPTS এ

maven-compiler-plugin বিকল্পগুলি

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
      <fork>true</fork>
      <meminitial>1024m</meminitial>
      <maxmem>2024m</maxmem>
    </configuration>
  </plugin>

4
আমি আসলে এই পোস্টটি তৈরি করার পরে, বিকল্পটি যুক্ত করেছি, -XX: ম্যাক্স্পার্মসাইজ = 1024 মি। তবে আমি এখনও স্মৃতি ত্রুটি খুঁজে পেয়েছি। অন্য একটি পোস্টে উল্লেখ করা হয়েছে যে কাঁটা থ্রেড দ্বারা ব্যবহৃত মেমরিটি টুকরো টুকরো করার জন্য আমাকে ম্যাভেন-শিফারফায়ার-প্লাগইনের আরগলাইনটিতে একটি বিকল্প যুক্ত করতে হবে। আমি এটিকে <argLine> -Xms256m -Xmx1024m -XX: PermSize = 128m -XX: MaxPermSize = 512m </argLine>
কেভিন মেরেডিথ

আমার উল্লেখ করা উচিত ছিল ... না, মাভেন বিল্ড এখনও ব্যর্থ হয়েছে।
কেভিন মেরেডিথ

এই সমস্ত বৈশিষ্ট্য যুক্ত করুন maven-compilier-pluginএবং বৃদ্ধি করুন -XX:MaxPermSize, Xmx=XX:MaxPermSize
ইলিয়া

এছাড়াও <fork> সত্য </ translation> বিকল্পটি ব্যবহার করুনmaven-compilier-plugin
ইলিয়া

আমি চেষ্টা করেছি (দয়া করে আসল পোস্টটি দেখুন), তবে আমার এমভিএন বিল্ড এখনও ব্যর্থ হয়েছে।
কেভিন মেরেডিথ

4

Druid.io সংকলন করার সময় আমি একই সমস্যা পেয়েছি, ম্যাক্সডাইরেক্টমিউরিসাইজ অবশেষে কাজ করে।

export MAVEN_OPTS="-Xms8g -Xmx8g -XX:MaxDirectMemorySize=4096m"

কৌতূহলপূর্ণ, ম্যাক্সডাইরেক্টমিউরিসাইজটি অবশ্যই ডিফল্টরূপে আনবাউন্ডেড হয় (যেমন আপনি একটি সীমা যোগ করেছিলেন, একটি পূর্বনির্মাণকে সামঞ্জস্য করেছেন না)।
টোমর গ্যাবেল

4

কনফিগারেশনের নীচে আমার ক্ষেত্রে এটি কাজ করছে

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <argLine>-XX:MaxPermSize=500M</argLine>
    </configuration>
</plugin>

-এক্সএক্স: ম্যাক্স্পার্মজেন-এর পরিবর্তে-এক্সএক্স: ম্যাক্স্পার্মসাইজ ব্যবহার করার চেষ্টা করুন



3

আপনি কোন ধরণের ওএস চালাচ্ছেন?

2GB এর বেশি র‌্যাম নির্ধারণের জন্য এটি কমপক্ষে একটি 64 বিট ওএস হওয়া দরকার bit

তারপরে আর একটি সমস্যা আছে। এমনকি যদি আপনার ওএসে আনলিমিটেড র‌্যাম থাকে তবে এটি এমনভাবে খণ্ডিত হয় যাতে 2 জিবি-র একটিও ফ্রি ব্লক পাওয়া যায় না, আপনি মেমরির ব্যতিক্রমগুলি থেকেও বেরিয়ে যাবেন। এবং মনে রাখবেন যে সাধারণ হিপ মেমরিটি ভিএম প্রক্রিয়াটি ব্যবহার করা মেমরির কেবলমাত্র একটি অংশ। সুতরাং একটি 32 বিট মেশিনে আপনি সম্ভবত এক্সএমএক্সকে 2048 এমবি সেট করতে পারবেন না।

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


2

ইউনিক্স / লিনাক্স প্ল্যাটফর্মে প্রকল্পটি তৈরি করার সময়, নীচে হিসাবে ম্যাভেন অপশন সিনট্যাক্স সেট করুন। লক্ষ্য করুন যে একক চৌম্বক চিহ্ন, ডাবল কোয়াটেশন নয়।

export MAVEN_OPTS='-Xmx512m -XX:MaxPermSize=128m'

0

.Mvn / jvm.config ব্যবহার করে আমার পক্ষে কাজ করেছে প্লাসের সাথে যুক্ত হওয়ার অতিরিক্ত সুবিধা রয়েছে।


0

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

এই ক্ষেত্রে সমাধানটি হ'ল ব্যাচ ফাইল এবং Xmx আকার হ্রাস করা এবং তারপরে খাঁটি অপারেশনগুলি সফল। আগ্রহ থাকলে আমি আরও বিশদ প্রকাশ করতে পারি।


0

কেউ ইতিমধ্যে 32 বিট ওএস সহ সমস্যার কথা উল্লেখ করেছে। আমার ক্ষেত্রে সমস্যাটি ছিল আমি 32 বিট জেডিকে দিয়ে সংকলন করছি।


0

পরিবেশের পরিবর্তনশীল 'MAVEN_OPTS' এ মেমরির আকার বাড়ানো এই সমস্যাটি সমাধান করতে সহায়তা করবে। আমার জন্য, -Xmx756M থেকে -Xmx1024M এ কাজ করে।

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