問題タブ [off-heap]

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 に答える
419 参照

java - JVM オフヒープ メモリ リークが発生する場所を特定する理由と方法

製品環境でメモリ リークを示す Java プロジェクトがあります。'top' または 'cat /proc/PID/status|grep VmRSS' を使用してメモリが拡大し、どんどん大きくなるのを確認できますが、JVM ヒープは良好な状態のままです。つまり、ヒープ メモリは '- Xmx' およびその他の JVM オプション。jmap/dump/jstack何が悪いのかを分析するために、私が知っている他のコマンドを使用しましたが、無駄でした。

最後に、行ごとにテストして問題を発見しました。これは JVM JavaScript エンジンの問題です。問題を再現できるコードをここから抽出しました。

次のコマンドで実行できます。

java -Xmx 128M -XX:MaxMetaspaceSize=64M -XX:MaxDirectMemorySize=64M -cp js-engine-test.jar com.unionpay.cqp.arch.js.JsEngineMain 2

次の方法でメモリ使用量を監視します。

while true; do cat /proc/PID/status|grep VmRSS;sleep 5;done

その後、メモリ使用量が時間の経過とともに増加することがわかります。

さて、私の質問は、問題がどこにあるのかわからない場合、どうすれば問題を見つけることができるでしょうか? また、メモリ分析やコマンド ツールを使用して、正しくないコードを見つけるにはどうすればよいでしょうか。

pmapおよびを使用しjcmdて、メモリが占​​有されている場所を確認します。jcmd ツールから情報を取得でき、オフヒープの問題であることがわかります。しかし、コードで接続できないため、コードのどの行が間違っているかを見つけることができません。

0 投票する
1 に答える
532 参照

java - ChronicleMap は改良された Concurrent HashMap ですか?

私は JVM のオフヒープ ストレージを初めて使用しますが、ChronicleMap はオフヒープに適しています。しかし、私の主な関心事は、主にパフォーマンスに関連しています。

構成で簡単なテストを実行しました

そして、次の結果が見つかりました

Concurrent HashMap と比較すると、読み取りパフォーマンスはかなり低いです。

デフォルトの Bloat ファクターとデフォルトの Marshaller を使用して、1024/2048 セグメントを試しました。しかし、それでも同じ結果です。

Off Heap 機能を利用して GC の一時停止を減らしたいだけで、永続的なものやレプリケーションを使用したり、JVM を超えてマップを使用したりするつもりはありません。

問題は、ChronicleMap を使用するか、ConcurrentHashMap を使用するかです。または、ChronicleMap の場合にパフォーマンスを向上させるために使用できる他の構成はありますか?

前もって感謝します。

** https://github.com/OpenHFT/Chronicle-Map/blob/master/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.javaを使用したベンチマーク:**

ここに画像の説明を入力

0 投票する
1 に答える
391 参照

java - オフヒープ メモリは Java/JVM 標準ですか?

私は HBase ドキュメントを読んでいて、オフヒープ読み取りパスに出くわしました。 私が理解している限り、このオフヒープは、Java がガベージ コレクターの範囲外にバイト/オブジェクトを格納するメモリ内の場所です。また、オフヒープ メモリの使用を容易にするいくつかのライブラリを検索し、Ehcatcheを見つけました。これは JVM の標準機能ですか、それともある種のハックですか? もしそうなら、これを行うために使用される基本的なクラスとテクニックは何ですか?