問題タブ [stack-size]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1482 参照

java - _JAVA_OPTIONS を使用して -Xss を設定できません

スタック サイズを増やした場合 (Java オプション -Xss1M) でのみ適切に実行できるアプリケーションがあります。コマンドラインで -Xss1M オプションを使用すると、機能します。このソリューションを Jenkins ジョブに統合するには、スクリプトの変更ではなく、_JAVA_OPTIONS 環境変数アプローチを使用することをお勧めします。

驚いたことに、「export _JAVA_OPTIONS=-Xss1M」と言ってもうまくいきません。一重引用符と二重引用符を使用して、JAVA_OPTS と JAVA_TOOL_OPTIONS も設定しようとしました。結果は常に同じです。特に奇妙なのは、Java がオプションを「拾った」と書いていることですが、効果はありません。

コマンド ライン オプションとして -Xss1M を使用して同じコマンドを実行すると、次のように動作します。

SunOS 5.10 と CentOS 4 の両方のマシンで同じ動作をしています。両方でJDK 6 を使用しています。 doc.10142/e14608/app_orminweblogic.htmを参照し、_JAVA_OPTIONS JAVA_TOOL_OPTIONS と JAVA_OPTS の違いを参照して、_JAVA_OPTIONS の使用例を確認してください。_JAVA_OPTIONS が一部のオプションなどを受け入れないかのような言及は見つかりませんでした。したがって、-Xss でも動作するはずです。私の間違いはどこですか?

更新 1 : コマンド ライン オプションの指定と _JAVA_OPTIONS は実際には同等のものではないと確信しました。-Xss だけでなく、他のオプションも同様です。

Ubuntu 14.04 で Java 7 を使用し、-XshowSettings:all オプションを使用して、オプションが Java の「内部」でどのように表示されるかを確認しました。3 つのコマンドを実行し、それらの出力を比較しました (違いは最初の行にありました)。

$ java -XshowSettings:all -version 2>&1 | 頭-5

$ _JAVA_OPTIONS="-Xms2048m -Xmx2048m" Java -XshowSettings:all -バージョン 2>&1 | 頭-5

$ Java -Xms2048m -Xmx2048m -XshowSettings:all -バージョン 2>&1 | 頭-5

これは、同じオプション -Xms、-Xmx が実際に持っていることを意味しますが、_JAVA_OPTIONS アプローチを使用すると、限られた効果しかありません。同じことが -Xss にも当てはまります。

$ _JAVA_OPTIONS="-Xss1m" java -XshowSettings:all -version 2>&1 | 頭-5

$ java -Xss1m -XshowSettings:all -バージョン 2>&1 | 頭-5

違いは、コマンド ライン オプションで -Xss1m が指定されている場合のみ、「Stack Size: 1.00M」と表示されることです。しかし、なぜ!_JAVA_OPTIONS の下にコマンドラインと完全に同等のものを提供しないのはなぜですか??

更新 2 : http://hg.openjdk.java.net/jdk7/jdk7/hotspot/archive/tip.tar.gzおよびhttp: //hg.openjdk.java.net/jdk7/jdk7/jdk/archive/tip.tar.gzそれぞれ。多くのプリントアウトを挿入し、Java とすべての関連ライブラリ (libjvm.so、rt.jar) をソースからビルドして実行しました。

根本的な原因は、_JAVA_OPTIONS からのオプションが、jdk-9b8c96f96a0f/src/solaris/bin/java_md.c の thr_create() の呼び出しに使用されていない配列 _jvm_args_array に格納されていることです。

スタック サイズを評価しようとする場所があります。これは、ContinueInNewThread(...) からの JNI_GetDefaultJavaVMInitArgs(void *args_) の呼び出しですが、320K に等しいデフォルトのスタック サイズ値を返すだけで、_JAVA_OPTIONS は使用しません。 . _JAVA_OPTIONS の解析は、完全に無意味に見える既に作成されたスレッドで後で行われます。

おそらく関心のある人のために何が起こっているかを説明するために、以下の呼び出しシーケンスを書きました (インデントは呼び出しの深さに対応します)。

現在、OpenJDK にバグを報告する方法を確認しています。OpenJDK がそのような実装を適切に設計されていると見なしたとしても、コマンド ライン ヘルプとドキュメントの両方で、-Xss が _JAVA_OPTIONS からは機能しないことを明確に説明する必要があります。

0 投票する
2 に答える
1133 参照

com - ASP.NET Core バイナリ (32 ビット) のスタック サイズを増やす方法は?

ASP.NET Core 2 バイナリのスタック サイズを増やすことはできますか? 32 ビットの COM 相互運用コンポーネントを使用する必要があり、定義された条件下でスタックを壊してしまいます。これは無限再帰ではなく、可能な限り最大のデータ セットが要求されたときにたまたま制限を超えてしまうワークロードであるため、スタックを増やすことで修正できる可能性があります。

EDITBIN によるスタック サイズの変更は、dotnet.exe に直接適用された場合にのみ機能します。これは明らかに推奨される解決策ではありません。