問題タブ [sun]

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 投票する
4 に答える
11716 参照

java - ヒープなどのサイズが安定している場合でも、Sun JVMがRSSメモリを消費し続けるのはなぜですか?

過去1年間で、アプリケーションのJavaヒープ使用量を大幅に改善しました。これは66%の大幅な削減です。そのために、Javaヒープサイズ、CPU、Java非ヒープなどのさまざまなメトリックをSNMP経由で監視してきました。

最近、JVMによる実際のメモリ(RSS、常駐セット)の量を監視していて、少し驚いています。JVMによって消費される実際のメモリは、アプリケーションのヒープサイズ、非ヒープ、エデンスペース、スレッド数などとは完全に独立しているようです。

JavaSNMPで測定されたヒープサイズ Javaヒープ使用グラフhttp://lanai.dietpizza.ch/images/jvm-heap-used.png

KB単位の実メモリ。(例:1MBのKB= 1 GB) Javaヒープ使用グラフhttp://lanai.dietpizza.ch/images/jvm-rss.png

(ヒープグラフの3つのディップは、アプリケーションの更新/再起動に対応します。)

これは私にとって問題です。JVMが消費している余分なメモリはすべて、OSがファイルのキャッシュに使用できるメモリを「盗む」ためです。実際、RSS値が約2.5〜3 GBに達すると、アプリケーションからの応答時間が遅くなり、CPU使用率が高くなり始めます。ほとんどの場合、IO待機になります。スワップパーティションへのページングが始まると、これはすべて非常に望ましくありません。

だから、私の質問:

  • なぜこうなった?「ボンネットの下で」何が起こっているのですか?
  • JVMの実際のメモリ消費を抑えるにはどうすればよいですか?

残酷な詳細:

  • RHEL4 64ビット(Linux-2.6.9-78.0.5.ELsmp#1 SMP Wed Sep 24 ... 2008 x86_64 ... GNU / Linux)
  • Java 6(ビルド1.6.0_07-b06)
  • Tomcat 6
  • アプリケーション(オンデマンドHTTPビデオストリーミング)
    • java.nioファイルチャネルを介した高I/O
    • 数百から数千のスレッド
    • データベースの使用量が少ない
    • 春、休止状態

関連するJVMパラメーター:

RSSの測定方法:

これはテキストファイルに送られ、定期的に監視システムのRRDデータベースに読み込まれます。psはキロバイトを出力することに注意してください。


問題と解決

最終的に正しいことが証明されたのはATorrasの答えでしたが、を使用して正しい診断パスに私を導いたのはkdgregorypmapでした。(両方の回答に投票してください!)これが起こっていたことです:

私が確かに知っていること:

  1. 私のアプリケーションは、3年以上前にアプリにコーディングしたJRobin1.4を使用してデータを記録および表示します。
  2. アプリケーションの最もビジーなインスタンスは現在作成します
    1. 起動から1時間以内に1000を超える新しいJRobinデータベースファイル(それぞれ約1.3MB)
    2. 起動後、毎日100以上
  3. 何か書き込むものがある場合、アプリはこれらのJRobinデータベースオブジェクトを15秒ごとに更新します。
  4. デフォルト構成のJRobin:
    1. java.nioベースのファイルアクセスバックエンドを使用します。このバックエンドMappedByteBuffersはファイル自体にマップされます。
    2. 5分ごとに1回、JRobinデーモンスレッドがMappedByteBuffer.force()すべてのJRobin基盤データベースMBBを呼び出します
  5. pmapリスト:
    1. 6500マッピング
    2. 5500は1.3MBのJRobinデータベースファイルで、これは最大7.1GBになります。

最後のポイントは私の「ユーレカ!」でした。一瞬。

私の是正措置:

  1. 明らかに優れている最新のJRobinLite1.5.2に更新することを検討してください
  2. JRobinデータベースに適切なリソース処理を実装します。現時点では、アプリケーションがデータベースを作成し、データベースがアクティブに使用されなくなった後は、データベースをダンプしません。
  3. MappedByteBuffer.force()定期的なタイマーではなく、データベース更新イベントに移動してみてください。問題は魔法のように消えますか?
  4. すぐに、JRobinバックエンドをjava.io実装に変更します(行の行を変更します)。これは遅くなりますが、おそらく問題ではありません。これは、この変更の直接の影響を示すグラフです。

JavaRSSメモリ使用グラフhttp://lanai.dietpizza.ch/images/stackoverflow-rss-problem-fixed.png

私が理解する時間があるかもしれないし、ないかもしれない質問:

  • JVM内で何が起こっているのMappedByteBuffer.force()ですか?何も変更されていない場合でも、ファイル全体が書き込まれますか?ファイルの一部?最初にロードしますか?
  • 常にRSSに一定量のMBBがありますか?(RSSは、割り当てられたMBBサイズの合計の約半分でした。偶然の一致ですか?そうではないと思います。)
  • MappedByteBuffer.force()定期的なタイマーではなく、データベース更新イベントに移動した場合、問題は魔法のように解消されますか?
  • RSSスロープがそれほど規則的だったのはなぜですか?これは、アプリケーションの負荷メトリックのいずれとも相関していません。
0 投票する
2 に答える
3550 参照

jvm - Linux (SL4) で定義されているデフォルトの JVM ヒープ サイズはどこにありますか

現在、SL4 クラスターで Sun の Java 1.6 を使用しています。

何らかの理由で、1.6 JVM が信じられないほど大きなヒープで起動し、起動できません。

たとえば -Xmx1800M で開始すると、問題なく動作します。それで、デフォルトのヒープサイズがどこに設定されているのか、さらに重要なことに、それを変更する方法は?

マシンには 8GB の物理メモリがあり、sun のサーバー JVM はデフォルトで最大 512M のメモリの半分で開始されるはずですが、1800M を超えて割り当てようとしているため、明らかにそうではありません。

編集: _JAVA_OPTIONS を使用できることはわかっていますが、これは少しぎこちなく感じます。プロパティ ファイルがどこかにあると思っていましたが、今のところ見つかりません。

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

java - ループを使用して多くの SMS を送信できない

GSM モデムを使用して PC から SMS を送信したいと考えています。この例を使用して、SMS を送信できます。ループを使用して多数のユーザーに SMS を送信したいのですが、うまくいきません。

私のエラー:

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

c++ - boost ::anyテストコードはSunCCでコンパイルされますが、g++ではコンパイルされません

次のうなずくテストコード:

SunのCCコンパイラとデフォルト設定を使用してコンパイルし、正常に動作します。ただし、g ++を使用すると、次のようになります。

これはg++バージョン3.4.3であるため、4.xバージョンでは異なる可能性があります。後で試してみます。これが、boost anyに「is_any」テンプレートが含まれていない理由ですか、それともコンパイラのバグですか?

インライン関数で期待するように、テンプレートを削除しても同じ結果が得られます。

(関連質問)

0 投票する
7 に答える
16906 参照

java - Sun独自のJavaクラスを使用するのは悪い習慣ですか?

Sun独自のJavaクラスを使用すると、コンパイラは警告を表示します。私は、これらのクラスを使用することは一般的に悪い考えだと思います。私はこれをどこかで読んだ。ただし、警告以外に、警告を使用しない基本的な理由はありますか?

0 投票する
4 に答える
199 参照

unix - Solaris の man ページからページ番号を削除しますか?

Solaris を使用すると、60 行ごとに次のようにページ番号が取得されます。

また、次のようなヘッダーが表示されます

それらを削除する方法はありますか? テキストを 1 行ずつ読んでいるときに、それらが表示されるのは気が散ります。

0 投票する
5 に答える
1285 参照

java - Clojure を実行するために使用できる Sun 以外の Java はどれですか?

プロジェクトの開発用 VM を構築するプロセスを自動化しているのですが、sun-java-6 を非対話型環境にインストールするのに非常に苦労しています。ClojureフレンドリーなJavaが行く限り、私の他のオプションは何ですか?

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

java - SCJPに何か良いものはありますか?

SUNがSCJPに利用できるグッズ(無料または有料)を提供しているかどうかを知りたいだけですか?マイクロソフトがそのようなグッズを提供しているように聞いた。誰かがこれについて何か考えを持っていますか?

乾杯、PK

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

java - Java EEまたはGlassfishを使用したNetbeans?

Glassfishを使用してNetbeansをダウンロードし、インストールしました。

次に、SunのサイトからJava EEをダウンロードする必要がありますか?

0 投票する
5 に答える
1801 参照

java - Oracle の下の NetBeans IDE

私は今読んだものについて少しおびえています。Java でプログラミングを開始したいので、いくつかの調査を行った結果、Swing GUI Designer の機能と Jasper Reports (iReport) による強力なレポート機能を備えた NetBeans が最適な IDE であるという結論に達しました。

しかし、Oracle (まもなく Sun を買収する予定) は、NetBeans に関心を持っていないようです。近いうちに Java で appz を構築する予定なので、次の点についてご意見をお聞かせください。

Oracle が NetBeans を廃止するという噂があっても、NetBeans を使い続けるか、それとも別の IDE を選択するか?

PS: 基本的には NetBeans が選択されますが、現在の状況を考えると、この決定には疑問があります。

ありがとうございました