問題タブ [jinfo]
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.
java - VMがすでに起動した後でjava-Xmxを変更します
私は自分のコンピューターで長時間実行されているJavaジョブを実行していますが、深刻なメモリプレッシャーに遭遇し、ガベージコレクターを頻繁に実行する必要があるため、終了に近づくと非常に遅くなります。-Xmx
つまり、このジョブに必要な最大ヒープサイズを過小評価していました。
ジョブを再開したくないので、JVMがすでに開始された後、たとえばを使用するなどして、JVMに最大ヒープサイズを変更させる方法はありますjinfo -flag
か?これは可能ですか?
jinfo -flag +Xmx1024m
またはのバリエーションを試してみましたがjinfo -flag Xmx=1024m
、すべて次の例外があります。これはDebianバグ#532538の症状ですか(影響を受けるバージョンのJVMを使用しています)、これは予期された動作ですか(後で変更することは不可能-Xmx
です)、またはフラグをjinfo
誤って提供していますか?
java - Mac OS X で jinfo を介して DTrace プローブを有効にできない
Snow Leopard で Java 6 を実行しています。
jinfo ユーティリティを使用して、実行中の Java プロセスで ExtendedDTraceProbes をオンにできるはずです。私のコマンド プロンプトでも、jinfoは一般的なフラグを有効にすることについて話しています。
私が知る限り、DTrace フラグに特別な価値はありません。重要なのは、その有無だけです。
しかし、それを実行しようとすると、sudo で始まるかどうかに応じて、2 つのエラーのいずれかが発生します。
想定:
jps
StayRunning プロセスと同じユーザー:
jinfo -flag +ExtendedDTraceProbes 1234
root として試行:
sudo jinfo -flag +ExtendedDTraceProbes 1234
エラーは2 行目にあり、もちろんプロセスはまだ実行中です。
奇妙なことに、このページには OS X の「+」オプションは表示されませんが、私のマシンでは使用方法のメッセージが出力されます。
これが私の簡単なコードです。Eclipse でも同様に失敗します。
StayRunning.java
java - jinfo がときどき JVM をクラッシュさせた
偶然にも、1 つの Java プロセスの統計が T (ジョブ制御シグナルによって、またはトレースされているために停止) であることがわかりました。jinfo
その時にこのコマンドを実行したため、関連している可能性があると思います。次にjinfo
、もう一度実行しようとすると、プロセスが再びクラッシュしました。しかし、再現するのは容易ではありません。
process の stat が なしで T になった理由を知っている人はいますkill -SIGSTOP
か? jinfo
プロセスがクラッシュする可能性があるバグはありますか?
jinfo
編集:プロセスが 60 日以上実行されたときに、この問題を 100% 再現しました。プロセスが長時間実行されている場合、バグがトリガーされるようです。新しいプロセスでは機能しません。
OMG、jmap
同じ問題があり、100% 再現されています。しかし、そうではありませんjstack
。今、私はそれがjvmの検出に関するものだと確信しています。
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (ビルド 1.6.0_37-b06)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.12-b01、混合モード)
java - jinfo と jmap を実行するときの悲惨なバグ
Java プロセスに対して jinfo または jmap を実行すると、Java プロセスが「サスペンド」されます。長時間実行されるプロセスで 100% 再現されます。
詳細な手順は次のとおりです。
- 25 日以上実行されている Java プロセスを選択します (これは新しいプロセスでは機能しないため、配線されています)。
- ps を実行してプロセスの状態を確認します。予期される "Sl" である必要があります。
- このプロセスに対して jinfo または jmap を実行します (BTY、jstack にはこの問題はありません)。
- ps を実行して、プロセスの状態を確認します。今度は「Tl」に変わります。これは、STOPPED を意味し、プロセスは要求に応答しません。
プロセスの出力は次のとおりです。
JVMのバグかもしれませんが、オラクルに報告しても何の反応もありません。ですから、ここにいる JVM の専門家が助けてくれることを願っています。
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (ビルド 1.6.0_37-b06)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.12-b01、混合モード)
java - Java オプション MaxDirectMemorySize は、java と jinfo で異なる方法で報告されます
新しいメモリ オプションを使用して Java プロセスを再起動し、-Xms4G -Xmx4G -XX:MaxDirectMemorySize=6G
これらの変更、特に 6G のダイレクト メモリが正しく適用されているかどうかを確認したいと考えました。
これを確認するために私が見つけた最初の解決策は、java
それ自体によるものでしたが、これは単に を報告しただけ0
で、新しい設定が効果がないことを意味しています。
後で見つけた 2 番目の解決策はjinfo
、経由6G
でした。
以前は他の目的で に依存していましたjava -XX:+PrintFlagsFinal
が、期待値が返されない理由が不思議です。java
と が異なる結果をjinfo
返すのはなぜですか?