0

JAVA_OPTS を次のように設定しました

export JAVA_OPTS="$JAVA_OPTS -server -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log  -Dcom.sun.management.jmxremote.ssl=false -Xms100m -Xmx100m -XX:MaxPermSize=5M -XX:ReservedCodeCacheSize=100m -Xss100k -XX:NewRatio=2 -XX:+UseParallelOldGC -XX:+UseParallelGC -XX:CompileThreshold=100  -XX:HeapDumpPath=/usr/share/$package -XX:-HeapDumpOnOutOfMemoryError -XX:OnError=$TEMP_CMD -XX:OnOutOfMemoryError=$TEMP_CMD"

次に、コマンド「trinidad -p」を実行しています

$TEMP_CMD で、引数なしでコマンドを使用すると、OutOfMemoryError が発生し、$TMP_CMD コマンドも実行されます。しかし、コマンドで引数を使用すると、次の出力が表示されます

Error: Could not find or load main class <arg>

arg は引数です

誰でも私に解決策を教えてもらえますか?

trinidad.yml またはその他の cofig ファイルに変更を加える必要はありますか?

4

1 に答える 1

7

試す

export JAVA_OPTS="... \"-XX:OnError=$TEMP_CMD\" ..."

また

export JAVA_OPTS='... "-XX:OnError=$TEMP_CMD" ...'

Bash のネストされた引用符と evalおよびhttp://www.grymoire.com/Unix/Quote.htmlを参照してください。

アップデート

上記は、テスト後もまだ機能しないようです。

test.sh

JAVA_OPTS="$JAVA_OPTS -Xmx32m '-XX:OnOutOfMemoryError=echo %p'"
java $JAVA_OPTS Test

与える

$ bash -x ./test.sh
+ JAVA_OPTS=' -Xmx32m '\''-XX:OnOutOfMemoryError=echo %p'\'''
+ java -Xmx32m ''\''-XX:OnOutOfMemoryError=echo' '%p'\''' Test
Exception in thread "main" java.lang.NoClassDefFoundError: '-XX:OnOutOfMemoryError=echo

不合格。

JAVA_OPTS="$JAVA_OPTS -Xmx32m -XX:OnOutOfMemoryError=\"echo %p\""
java $JAVA_OPTS Test

与える

$ bash -x ./test.sh
+ JAVA_OPTS=' -Xmx32m -XX:OnOutOfMemoryError="echo %p"'
+ java -Xmx32m '-XX:OnOutOfMemoryError="echo' '%p"' Test
Exception in thread "main" java.lang.NoClassDefFoundError: %p"

不合格。

bash オプションを使用した診断-xは、問題の根本が bash 変数置換と単語分割規則の奇妙な組み合わせにあることを Google に知らせました: http://mywiki.wooledge.org/BashFAQ/050

考えられる回避策はいくつかあります。

1) ヘルパー スクリプトを使用して頑固なスペースを取り除く

JAVA_OPTS+=" -Xmx32m -XX:OnOutOfMemoryError=/usr/tmp/test/oom.sh"
java $JAVA_OPTS Test

2)OnOutOfMemoryError変数の外へ移動

JAVA_OPTS="$JAVA_OPTS -Xmx32m"
java $JAVA_OPTS -XX:OnOutOfMemoryError="echo %p" Test

与える

$ bash -x ./test.sh
+ JAVA_OPTS=' -Xmx32m'
+ /usr/java/jdk1.6.0_16/bin/java -Xmx32m '-XX:OnOutOfMemoryError=echo %p' Test
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="echo %p"
#   Executing /bin/sh -c "echo 1639"...
1639
于 2012-09-21T14:31:39.207 に答える