কিভাবে এসবিটি জন্য গাদা আকার সেট করতে?


90

আমি এসবিটি 0.12.0 ব্যবহার করছি। স্ট্যাক ওভারফ্লোতে আমি অন্যান্য উত্তরগুলি পড়েছি এবং সেগুলি অনুসরণ করেছি, তবে তাদের কোনওটিই সহায়তা করে না, উদাহরণস্বরূপ:

  • ForkRunক্লাস তৈরি করুন - আমার এসবিটি ব্যবহারের সময় আমি কোনও কাঁটাচামচ প্রক্রিয়া লক্ষ্য করি নি
  • পরিবেশের পরিবর্তনশীল সেট করুন JAVA_OPTS- এটি সেট করা আছে তবে এসবিটি-র প্রসেস কমান্ড লাইন এটি ব্যবহার করবে বলে মনে হয় না।
  • sbt -J-Xmx2Gপ্যারামিটারটি এসবিটি প্রসেস কমান্ড লাইনে সংযোজন করে, তবে পুরানো মান -Xmx1536mসংযুক্ত প্যারামিটারের পরিবর্তে এসবিটি দ্বারা ব্যবহৃত হয়।

আমি কিছু অনুপস্থিত করছি? টেস্টিং এবং উভয় করার সময় আমি কীভাবে এসবিটি 0.12-র জন্য গাদা আকার সেট করব run?


9
আপনি memএসবিটি শুরু করার সময় কি প্যারামিটার চেষ্টা করেছেন? (উদাঃ sbt -mem2000)
ওম-নাম-মনোনীত

4
আপনার টাইপও থাকতে পারে, এটি জাভা-ওপিটিএস জাভা
নোয়া

এই প্রশ্নের সদৃশ আমার উত্তর দেখুন। stackoverflow.com/questions/3868863/… চিহ্নিত উত্তরটি ভুল আছে, তবে আমার কাজ করে (কখনও কখনও আপনাকে মন্তব্য / ভোটও চেক করতে হবে :)
আইউইন

উত্তর:


101

আপনার দরকার SBT_OPTS, আমি আমার .বাশ_প্রফাইলে যা ব্যবহার করি তা এখানে :

export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

আপডেট: আপনার 2 জি হ্যাপ স্পেস পেতে আপনি এটি ব্যবহার করতে পারেন:

export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

দ্রষ্টব্য: এসবিটি সর্বশেষ সংস্করণ হতে হবে

পুরানো সংস্করণগুলিতে sbtথাকা বাগগুলি রয়েছে যা এই সেটিংগুলিকে ওভাররাইড করে, ম্যাকের brew upgrade sbtজন্য সর্বশেষের sbtজন্য ব্যবহার (ব্রিউ ইনস্টল অনুমান করে) (লিনাক্সের জন্য আইডিকে)। https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


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

4
উত্স-নিয়ন্ত্রিত যে এসবিটি কনফিগারেশনে এই পরিবেশ সেটিংটি সেট করার কোনও উপায়?
কেভিন মেরিডেথ

স্ক্যালাজ উত্সটি একবার দেখুন, তাদের কাছে এসবিটি নামে একটি বাশ ফাইল রয়েছে যা তারা আবশ্যক সমস্ত কিছু লোড করে থাকে পরিবেশগত নির্দিষ্ট github.com/scalaz/scalaz/blob/series/7.2.x/sbt
নূহ

4
আমি একটি সতর্কতা Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
পেয়েছি

4
@ সাম্তেবেস্ট পার্ম জেনার মূলত জাভা 8 এ সরানো হয়েছে সুতরাং এটি অন্তর্ভুক্ত করার প্রয়োজন নেই।
নোহ

66

মার্চ ২০১৫ পর্যন্ত, আপনি যদি হোমব্রিউ দিয়ে ওএসএক্স-এ এসবিটি ব্যবহার করছেন তবে আপনার ফাইলটি সম্পাদনা করা উচিত/usr/local/etc/sbtopts

যেমন

# set memory options
#
#-mem   <integer>
-mem 2048

4
এটি উইন্ডোগুলির পক্ষেও এনভিভ ভেরিয়েবলগুলির সাথে গোলমাল করার পরিবর্তে ভালভাবে কাজ করে বলে মনে হয় (ফাইলটি সি: \ প্রোগ্রাম ফাইলগুলির মধ্যে রয়েছে: এসবিটি \ কনফারেন্স)।
লুসিয়ানো

4
লিনাক্স এ এটি আছে /etc/sbt-launcher-packaging
রবিন গ্রিন

4
উবুন্টু আর্টফুল-এ, আমি এটি পেয়েছি/etc/sbt/sbtopts
সিনেসো

এই সমাধানটি JVM সমস্ত 2GB মেমরির পূর্বপরিচালিত করে তুলবে। আপনি যদি SBT_OPTS=-Xmx2G sbtএসবিটি শুরু করতে ব্যবহার করেন তবে এটি সর্বোচ্চ 2 জিবি পর্যন্ত প্রয়োজনীয় গাদা বাড়বে।
এমজিডি

উপরে @mike গুলি সমাধান কটাক্ষপাত আছে: stackoverflow.com/a/55706960/1199564
mgd


19

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

এসবিটি এক্সিকিউটেবলে একটি লাইন রয়েছে যা বলে:

. /usr/share/sbt/sbt-launch-lib.bash

সুতরাং আমি ফাইলটি সম্পাদনা করেছি:

  # run sbt
  execRunner "$java_cmd" \
    ${SBT_OPTS:-$default_sbt_opts} \
-   $(get_mem_opts $sbt_mem) \
    ${java_opts} \
    ${java_args[@]} \
    -jar "$sbt_jar" \
    "${sbt_commands[@]}" \
    "${residual_args[@]}"

-লাইনটি সরান ।

এখন আপনি যখন এসবিটি চালান, এটি আর আপনার জেভিএম হিপ আকারের সেটিংসকে ওভাররাইড করে না। আপনি @ নানের উত্তর ব্যবহার করে গাদা আকারের সেটিংস নির্দিষ্ট করতে পারেন।

বা বিকল্পভাবে:

sbt -J-Xmx4G -J-Xms4G


4
আসলে এটা মনে হচ্ছে যে export SBT_OPTS="..."~/.sbtconfigপ্রকৃতপক্ষে কাজ করে।
এরিক কাপলুন

15

উইন্ডোগুলিতে, 0.13.9.2 এসবিটি-র জন্য, আপনার পছন্দসই jvm JAVA_OPTSবিকল্পগুলিতে সেট করতে হবে।

> set JAVA_OPTS=-Xmx1G
> sbt assembly

sbt.batস্ক্রিপ্ট থেকে তার অক্ষমতা লোড conf\sbtconfig.txtমধ্যে CFG_OPTSকিন্তু ব্যবহার করবে JAVA_OPTSযদি সেট পরিবর্তে।

সম্পর্কিত প্রবন্ধগুলি sbt.bat:

rem FIRST we load the config file of extra options.
set FN=%SBT_HOME%\..\conf\sbtconfig.txt
set CFG_OPTS=
FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO (
  set DO_NOT_REUSE_ME=%%i
  rem ZOMG (Part #2) WE use !! here to delay the expansion of
  rem CFG_OPTS, otherwise it remains "" for this loop.
  set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME!
)

। । । (এড়িয়ে যান) । ।

rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
set _JAVA_OPTS=%JAVA_OPTS%
if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS%
:run
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*

11

আমি ম্যাক ওএস এক্স-তে এসবিটি-র একটি হোমব্রু ইনস্টল সহ এই জাতীয় কোনও সমস্যার সমাধানের জন্য খুঁজছিলাম। আপনি যদি হোমব্রিউয়ের মাধ্যমে এসবিটি ইনস্টল করেন তবে /usr/local/bin/sbtফাইলটি যেহেতু ভাল লাগে তেমন আপনি পরিষ্কার

#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"

এর অর্থ হল যে আপনি যে কোনও সেটিংস SBT_OPTSরেখেছেন তা স্থির থাকবে (আপনার-এক্সএমএক্স অগ্রাধিকার নেবে)। তদ্ব্যতীত, স্ক্রিপ্টের প্রথম লাইনটি কোনও কমান্ড ~/.sbtconfigউপস্থিত থাকলে এটি সম্পাদন করবে তাই আপনি যদি কিছুটা খেলেন তবে আপনার এসবিটি বিকল্পগুলি রাখার জন্য এটি আরও ভাল জায়গা হতে পারে। আপনি করতে হবে না source ~/.bash_profileপ্রত্যেক সময় আপনাকে পরিবর্তন করতেSBT_OPTS


4
হ্যাঁ. আমার have HOM / .sbtconfig এ এটিই। SBT_OPTS = "- XX: MaxPermSize = 512M -Xmx2G -Xms64M" রফতানি করুন এবং যখন আমি sbt শুরু করি, আমি একটি পিএস অক্স করি এবং এটি / usr / bin / java -Xmx512M -XX প্রদর্শন করে: ম্যাক্সপার্মসাইজ = 512 এম-এক্সএমএক্স 2 জি-এক্সএমএস 64 এম -জার / ইউএসআর / লোকাল / সেলার / এসবিটি / 0.13.0 / লিবেক্সেক / এসবিটি-লঞ্চ.জার
অ্যাড্রিয়ান রদ্রিগেজ

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

4
হোমব্রাব্য এসবিটি-র এখন -mem/usr/local/etc/sbtopts
পায়ের

6

পাওয়ারশেল থেকে এসবিটি চলমান থাকলে, SBT_OPTsপরিবেশের পরিবর্তনশীলটি সেট করুন :

$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"

তারপরে চালান:

sbt

6

উইন্ডোজে এসবিটি সংস্করণ 1.0.4 এর জন্য ডিফল্ট জেভিএম সেটিংসsbt\conf\sbtconfig.txt ফাইল থেকে আসে । কেবল এখানে মানগুলি সম্পাদনা করুন। পরিবর্তন -Xmx512Mকরুন -Xmx2048M

এসবিটি-র জন্য এটি জেভিএম বিকল্পগুলির একমাত্র উত্স নয়। অন্যদেরও পরিদর্শন করে পাওয়া যাবে sbt.bat। একটি সরল সেটিংস থেকে আসা যেখানে না নির্ণয় করতে পথ, ব্যাচ ফাইলের মধ্যে এই লাইন আউট মন্তব্য করে হল: @echo off


দ্রষ্টব্য: sbt\confএটি ব্যবহারকারীর ডিরেক্টরিতে নয়, যেমন প্রোগ্রাম ফাইল ফোল্ডারে রাখা হয়েছে C:\Program Files (x86)\sbt\conf
সুমা

5

এটি করার একটি দ্রুত উপায় হ'ল .jvmoptsআপনার প্রকল্পের মূলের একটি ফাইল ( লগম ফ্রেমওয়ার্ক ডকুমেন্টেশন থেকে ):

 $ cat .jvmopts
 -Xms512M
 -Xmx4096M
 -Xss2M
 -XX:MaxMetaspaceSize=1024M

4
এটি যথাযথ উত্তর হিসাবে চিহ্নিত হওয়া উচিত কারণ এটি প্রতি প্রকল্প সেটিংসেও অনুমতি দেয়।
এমজিডি

0

আমার ক্ষেত্রে, আমার পরিষেবার কনফিগারেশন পরিবেশ পরিবর্তনশীল SBT_OPTSও ওভাররাইট করে JAVA_OPTS। আমি আমার build.sbtনিম্নলিখিতগুলিতে সেট করে সীমাটি নির্ধারণ করতে সক্ষম হয়েছি :

javaOptions in Universal ++= Seq(
  "-J-Xms1g",
  "-J-Xmx2g")

তথ্যসূত্র: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html

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