Sbt के लिए ढेर का आकार कैसे सेट करें?


90

मैं SBT 0.12.0 का उपयोग कर रहा हूं। मैंने स्टैक ओवरफ्लो पर अन्य उत्तर पढ़े हैं और उनका अनुसरण किया है, हालांकि उनमें से कोई भी मदद नहीं करता है, उदाहरण के लिए:

  • ForkRunवर्ग बनाएँ - मैंने sbt के उपयोग के दौरान किसी भी कांटे की प्रक्रिया को नहीं देखा है
  • सेट परिवेश चर JAVA_OPTS- यह सेट है लेकिन sbt की प्रक्रिया कमांड लाइन इसका उपयोग नहीं करती है।
  • sbt -J-Xmx2Gपैरामीटर को sbt प्रक्रिया कमांड लाइन में जोड़ता है, हालांकि पुराने मूल्य -Xmx1536mका उपयोग एपेंडेड पैरामीटर के बजाय sbt द्वारा किया जाता है।

क्या मैं कुछ भूल रहा हूँ? परीक्षण और परीक्षण दोनों करते समय मैं sbt 0.12 के लिए कैसे आकार निर्धारित करता हूं run?


9
क्या आपने memsbt शुरू करते समय पैरामीटर की कोशिश की है ? (जैसे sbt -mem2000)
om-nom-nom

2
आपके पास एक टाइपो हो सकता है, यह JAVA_OPTS होना चाहिए JAVA_OPS नहीं
नूह

इस प्रश्न के डुप्लिकेट के लिए मेरे उत्तर की जाँच करें। stackoverflow.com/questions/3868863/… चिह्नित उत्तर गलत है, लेकिन मेरा काम करता है (कभी-कभी आपको टिप्पणियों / वोटों की जांच करने की भी आवश्यकता होती है :)
iwein

जवाबों:


101

आप की जरूरत है SBT_OPTS, यहाँ मैं अपने .bash_profile में क्या उपयोग करता हूँ :

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

अद्यतन: अपने 2G हीप स्थान पाने के लिए आप इसका उपयोग कर सकते हैं:

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

नोट: SBT नवीनतम संस्करण होना चाहिए

पुराने संस्करणों sbtमें बग होते हैं जो इन सेटिंग्स को ओवरराइड करते हैं, मैक के brew upgrade sbtलिए नवीनतम sbt(काढ़ा स्थापित करना) (लिनक्स के लिए आईडीके) का उपयोग करते हैं। https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


1
धन्यवाद। यह वास्तव में sbt प्रक्रिया कमांड लाइन को अपेक्षा के अनुसार बदलता है, हालांकि पुरानी -Xmx1546mअभी भी कमांड लाइन में मौजूद है और अधिकतम हीप आकार अभी भी 1.5 जीबी पर छाया हुआ है, जैसा कि विज़ुव्म में दिखाया गया है।

1
स्रोत-नियंत्रित एसबीटी कॉन्फ़िगरेशन में इस पर्यावरण सेटिंग को सेट करने का कोई तरीका?
केविन मेरेडिथ

Scalaz स्रोत पर एक नजर डालें, वे एक पार्टी एसबीटी कि भार सब कुछ वे जरूरत बुलाया फ़ाइल है उर्फ पर्यावरण विशिष्ट है 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
samthebest

1
@samthebest Perm Gen को मूल रूप से Java 8 में हटा दिया गया था इसलिए इसे शामिल करना आवश्यक नहीं है।
नूह

65

मार्च 2015 तक, यदि आप होमब्रे के साथ OSX पर sbt का उपयोग कर रहे हैं, तो आपको फ़ाइल को संपादित करना चाहिए/usr/local/etc/sbtopts

जैसे

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

5
ऐसा लगता है कि यह विंडोज़ के लिए भी अच्छी तरह से काम करता है, इसके बजाय एनवी चर के साथ गड़बड़ करने के लिए (फ़ाइल c: \ program files \ sbt \ confs के तहत है)।
लुसियानो

2
लिनक्स में यह है /etc/sbt-launcher-packaging
रॉबिन ग्रीन

1
उबंटू आर्टफुल में, मैंने इसे देखा/etc/sbt/sbtopts
सिनेसियो

यह समाधान JVM को सभी 2GB मेमोरी का प्रचार करेगा। यदि आप SBT_OPTS=-Xmx2G sbtएसबीटी शुरू करने के लिए उपयोग करते हैं , तो यह ढेर को बढ़ा देगा, जो अधिकतम 2GB तक की आवश्यकता होगी।
एमजीडी

ऊपर @mike रों समाधान पर एक नज़र डालें: stackoverflow.com/a/55706960/1199564
mgd

42

"sbt -mem 23000 रन" मेरे लिए काम करता है।


6
23Gb है कि यह नहीं है ..?
बेन हचिसन

1
@ हेनचिसन शायद यह पॉलप के एसबीटी रैपर हैं, न कि ओरिजिनल एसबीटी यह है
मैटनस्टर

19

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

SBT निष्पादन योग्य में एक पंक्ति है जो कहती है:

. /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 चलाते हैं, तो यह आपकी JVM हीप आकार सेटिंग्स को ओवरराइड नहीं करेगा। आप @ Noan के उत्तर का उपयोग करके ढेर आकार की सेटिंग्स निर्दिष्ट कर सकते हैं।

या वैकल्पिक रूप से:

sbt -J-Xmx4G -J-Xms4G


3
वास्तव में ऐसा लगता है कि export SBT_OPTS="..."में ~/.sbtconfigवास्तव में काम करता है।
एरिक कपलुन

15

विंडोज़ पर, sbt 0.13.9.2 के लिए, आपको अपने JAVA_OPTSइच्छित jvm विकल्पों पर सेट करने की आवश्यकता है ।

> 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चिपक जाएगी (आपका -Xmx पूर्वता लेगा)। इसके अलावा, स्क्रिप्ट की पहली पंक्ति किसी भी कमांड को निष्पादित करेगी ~/.sbtconfigयदि यह मौजूद है तो यह आपके एसबीटी विकल्पों को लगाने के लिए एक बेहतर जगह हो सकती है यदि आप उनके साथ काफी खेल रहे हैं। source ~/.bash_profileजब भी आप इसमें बदलाव करेंगे, आपको हर बार नहीं करना पड़ेगाSBT_OPTS


2
हाँ। यह मेरे पास $ HOME / .sbtconfig में है। निर्यात SBT_OPTS = "- XX: MaxPermSize = 512M -Xmx2G -Xms64M" और जब मैं sbt शुरू करता हूं, तो एक ps aux करता हूं और यह / usr / bin / java -Xmx512M -XX: MaxPermSize = 512M -Xmx2G -Xms64Mjar.jm प्रदर्शित करता है। usr / स्थानीय / तहखाने / sbt / 0.13.0 / libexec / sbt-launch.jar
एड्रियन रोड्रिगेज

हालाँकि, मैंने अभी नीचे दिए गए उत्तर को देखा और शायद वह लांचर दूसरे प्रकार के सेटअप के लिए है। मेरा सेटअप होमब्रे पैकेज का उपयोग करके मैक के लिए विशिष्ट है।
एड्रियन रोड्रिग्ज

2
Homebrew SBT को अब ढेर के आकार की आवश्यकता होती है, जिसमें -memपैरामीटर/usr/local/etc/sbtopts
Synesso

6

यदि PowerShell से sbt चल रहा है, तो 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

1
इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि यह प्रति प्रोजेक्ट सेटिंग्स की भी अनुमति देता है।
एमजीडी

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.