пространство кучи по умолчанию maven и размер Permgen

В этом примере показано, как использовать getopt и eval и HEREDOC и shift для обработки коротких и длинных параметров с последующим требуемым значением и без него.

#!/usr/bin/env bash

# usage function
function usage()
{
   cat << HEREDOC

   Usage: $progname [--num NUM] [--time TIME_STR] [--verbose] [--dry-run]

   optional arguments:
     -h, --help           show this help message and exit
     -n, --num NUM        pass in a number
     -t, --time TIME_STR  pass in a time string
     -v, --verbose        increase the verbosity of the bash script
     --dry-run            do a dry run, don't change any files

HEREDOC
}  

# initialize variables
progname=$(basename $0)
verbose=0
dryrun=0
num_str=
time_str=

# use getopt and store the output into $OPTS
# note the use of -o for the short options, --long for the long name options
# and a : for any option that takes a parameter
OPTS=$(getopt -o "hn:t:v" --long "help,num:,time:,verbose,dry-run" -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments." >&2 ; usage; exit 1 ; fi
eval set -- "$OPTS"

while true; do
  # uncomment the next line to see how shift is working
  # echo "\$1:\"$1\" \$2:\"$2\""
  case "$1" in
    -h | --help ) usage; exit; ;;
    -n | --num ) num_str="$2"; shift 2 ;;
    -t | --time ) time_str="$2"; shift 2 ;;
    --dry-run ) dryrun=1; shift ;;
    -v | --verbose ) verbose=$((verbose + 1)); shift ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

if (( $verbose > 0 )); then

   # print out all the parameters we read in
   cat <<-EOM
   num=$num_str
   time=$time_str
   verbose=$verbose
   dryrun=$dryrun
EOM
fi

# The rest of your script below

Наиболее значимые строки сценария выше:

OPTS=$(getopt -o "hn:t:v" --long "help,num:,time:,verbose,dry-run" -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments." >&2 ; exit 1 ; fi
eval set -- "$OPTS"

while true; do
  case "$1" in
    -h | --help ) usage; exit; ;;
    -n | --num ) num_str="$2"; shift 2 ;;
    -t | --time ) time_str="$2"; shift 2 ;;
    --dry-run ) dryrun=1; shift ;;
    -v | --verbose ) verbose=$((verbose + 1)); shift ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

Короче говоря, точка, читаем и обрабатываем практически все (ИМХО).

Надеюсь, что это поможет кому-то.

0
задан Breaking Benjamin 26 March 2019 в 18:43
поделиться

1 ответ

Сначала пространство кучи и т. Д. Устанавливаются JVM, о чем вы правильно упомянули.

Кроме того, вы можете установить их для Maven через .mvn/jvm.config или, как вы уже упоминали, через MAVEN_OPTS, как уже упоминалось.

MAVEN_OPTS и, возможно, другие вещи (например, JAVA_HOME) также могут быть определены через .mavenrc, который находится в $HOME/.mavenrc (Linux / Mac) или %USERPROFILE%\mavenrc_pre.bat или %USERPROFILE%\mavenrc_pre.cmd (Windows ):

Таким образом, файл .mavenrc может содержать:

export JAVA_HOME=.../jdk-11.0.1.jdk
export MAVEN_OPTS="-Djava.awt.headless=true -Xmx2g"

, иначе можно использовать файл jvm.config (расположенный в проекте в каталоге .mvn). содержать:

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

Нет никаких значений по умолчанию, определенных Maven. Значения по умолчанию - это значения, определенные JVM.

Для Java 7 я бы порекомендовал не менять PermGen, потому что это обычно требуется, если вы развертываете в контейнеры сервлетов, такие как Tomcat или реальные серверы приложений и т. Д. Но, конечно, это зависит. 1120 Кроме того, цитату из книги я бы просто сказал. Просто начните с значений по умолчанию. Если мы говорим о производительности, вам следует проверить, действительно ли проблема в памяти, в которой я обычно сомневаюсь. Там, конечно, есть влияние, которое оказывает влияние, если мы говорим о сборках, которые имеют более 100 модулей в одной многокомпонентной сборке.

0
ответ дан khmarbaise 26 March 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: