問題タブ [jmap]
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 - Tomcat セッションの Java クラスは何ですか?
を使用してTomcatサーバーのJVM ヒープ ダンプを作成しました。メモリ内のすべてのセッションのサイズを把握したいと考えています。jmap
そのため、セッションサイズを見積もるためにどのタイプのオブジェクトを探す必要があるかを知りたいです。
ありがとうございました
java - PermGenを死んだGroovyコードで埋めているコードを見つける
Glassfishインスタンスは、しばらくの間2週間ごとにダウンしましたjava.lang.OutOfMemoryError: PermGen space
。PermGenスペースを512MBに増やし、メモリ使用量のダンプを開始しましjstat -gc
た。2週間後、PermGenスペースが着実に増加していることを示す次のグラフを思いつきました(x軸の単位は分、y軸はKBです)。
私はエラーを特定できるある種のプロファイリングツールを探し回ってみました。ここでSOが言及したjmapのスレッドは、非常に役立つことがわかりました。からダンプされた約14000行のうちjmap -permstats $PID
、約12500行が含まれgroovy/lang/GroovyClassLoader$InnerLoader
ており、独自のGroovyコードまたはGroovy自体からのある種のメモリリークを示しています。Groovyは関連するコードベースの1%未満を構成していることを指摘する必要があります。
以下の出力例:
では、どのコードがこれを引き起こしているのかをもっと知るにはどうすればよいですか?
この記事から、Groovyコードがどこかに動的にクラスを作成していると推測します。そして、jmapからのダンプから、死んだオブジェクト/クラス(?)のほとんどが同じparent_loaderを持っていることがわかりますが、このコンテキストでそれが何を意味するのかはわかりません。ここから先に進む方法がわかりません。
補遺
後発者の場合、受け入れられた回答は問題を解決しないことを指摘する価値があります。クラス情報をあまり保存しないことで、再起動するまでに必要な期間を10倍に延長するだけです。私たちの問題を実際に修正したのは、それを生成したコードを取り除くことでした。メソッドとクラスのアノテーションとしてGroovyを使用してカスタム制約をスクリプト化できる、検証(契約による設計)フレームワークOValを使用しました。プレーンJavaで明示的な事前条件と事後条件を優先してアノテーションを削除するのは退屈でしたが、それで作業は完了しました。OVal制約がチェックされるたびに、新しい匿名クラスが作成されていて、何らかの形で関連するクラスデータがメモリリークを引き起こしていたのではないかと思います。
java - Jmapヒープダンプ、若い世代が含まれていますか?
簡単な質問
jmapヒープダンプには、古い世代のみが含まれますか、それとも若い世代も含まれますか?
長い説明
私は2つのヒープダンプを持っています(jmap -heap:format=b 9999
):
- 負荷のない(HTTPリクエストのない)サーバーの1つ
- 1つはCPUを50%動作させ、高負荷(ベンチマーク)
さて、最初のダンプは2番目よりも大きいヒープサイズを示しています(これは奇妙だと思いました)。
これは、ガベージコレクターが頻繁に実行されているために(高負荷の)若い世代が頻繁に変更されているためでしょうか(はい、JVMはほぼ満杯です)。古い世代は99%でいっぱいですが、若い世代のスペース使用量は大きく異なることに気づきました。
つまり、GCが仕事をした直後に2番目のダンプを作成したということです。これが、そのサイズが小さい理由です。私は正しいですか?
追加情報:
Java引数:
java - jdk1.6 JMAP.EXE:不明な理由でリモートスレッドが失敗しました
次のバッチファイルを使用して、Windowsコンソールシェルで実行されているJavaサービスのコアダンプを取得すると、このエラーが発生します。
そしてここにスクリプトがあります(-XX:OnError = "script.bat"):
jconsole.exeを実行し、プロセスにアタッチして、コアを簡単にダンプできます。なぜこれはコマンドラインから簡単ではないのですか?LinuxバージョンのJMapには、より多くのオプションと機能があることを私は知っています。これは私がここで遭遇していることですか:WindowsバージョンのJMapがこの単純なことを実行できない状況ですか?
java - ライブオプションが使用されている場合、jmapはガベージコレクションを強制しますか?
私は実験してきましたjmap -histo
そしてjmap -dump
今日
このシーケンスで実行する場合
heap.3
に似ていheap.2
ますheap.1
。特に、私が興味を持っている「死んだ」オブジェクトはにheap.1
ありませんheap.3
。
これを見て、私は私が何を期待すべきかを教えてくれるドキュメントを探し始めました。私が何とか得た最も近いものはこの議論でした。そこでは、briandとalanbからのコメントは、実際には、ライブオプションを使用したときにこのGCが発生することを期待できることを示唆しています。しかし、答えは5年前のものであり、フォーラムへの投稿は仕様については少し非公式のようです。
文書化されている現在の動作はどこにありますか?
java - jmap -permstat (ブートストラップを除く) から「デッド」クラスローダーしか表示されないのはなぜですか?
私たちはアプリの permgen メモリ スペースをどんどん高くしてきましたが、permgen 領域に食い込んでいる何らかのリークがあるかどうかを調べようとしています。ホット アンデプロイ/再デプロイ アクションは実行しませんが、動的および CGLIB 生成の両方のプロキシが多数あります。また、さまざまなユースケースをサポートするために、いくつかの複雑なクラスローダー ビットも実行しています。これらも、permgen の浪費の一因である可能性があるのではないかと疑っています。
そこで、実行中のアプリで jmap -permstat を実行し、permgen スペースを埋めている可能性があるものについて洞察を得たいと考えています。(permstat の出力から得られる可能性のある手がかりを追跡できるように、ライブ オブジェクトとデッド オブジェクトの両方で通常のヒープ ダンプも実行します)。
ただし、jmap permstat によってリストされた 2400 のクラスローダーのうち、ブートストラップ クラスローダーを除くすべてが「デッド」としてリストされます。アプリは間違いなくライブで動作しているため、これは意味がありません。
私の理解では、クラスローダがガベージ コレクションの対象である場合、jmap はそのクラスローダを「死んだ」と報告しますが、ここでは間違っているに違いありません...
私は何が欠けていますか?ここでの「死んだ」とはどういう意味ですか? グーグルで調べても、私がここで持っている誤解以外の多くの答えは得られません。
java - 「共有オブジェクトメモリ」と「ヒープメモリ」 - Java
Javaの「共有オブジェクトメモリ」と「ヒープメモリ」の違いは何ですか? 「共有オブジェクトメモリ」は「ヒープメモリ」のスーパーセットのようなものですか?
この質問のソースは、jmap のドキュメントです。「共有オブジェクトメモリ」と「ヒープメモリ」を印刷するためのさまざまなオプションを提供します。
java - jmapヒストグラムのこれらのオブジェクトは何ですか?
ヒープのヒストグラムを取得するためにjmapを使用しています。「[C」、「[S」、「[I」、「[B」」と呼ばれるオブジェクトが何であるかわかりません。誰か知ってる?
jquery - ZendグーグルマップとJquery
私はZendfwを使用していますが、自分のページの1つにGoogleマップアプリケーションを実装しようとしましたが、成功しませんでした。地図は表示されません。私はこのチュートリアルを使用してZendの方法を試しました:
http://www.bitconsultants.net/2010/geocoding-with-google-maps-and-the-zend-framework/
成功しません:地図はページに表示されません。
私はJQueryの方法を選び、gMapを使用しました。ここでも地図は表示されません。
jMapも試してみました。これにより、「このブラウザはGoogleマップと互換性がないと報告されています」というエラーが発生します。
私は以前に他のウェブサイトにグーグルマップを適用しましたが(Zendはありません)、すべて正常に機能しました。問題がどこにあるのかについて手がかりを与えることができる人はいますか?お願いします。
他の場所で使用されているものと同じであるため、マップのコードに直接関連する問題はないと思います。ただし、必要な場合は、コードを参照してください。
前もって感謝します。
});
java - tomcatが使用しているヒープサイズを確認したい
私は ubuntu を使用しています。ヒープ サイズの設定が tomcat によって使用されていることを確認する必要があります。
どうやってやるの?
jmap を試してみたのですが、サーバー上にないようです。どうにかして個別にダウンロードできますか?