問題タブ [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.
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
でした。(両方の回答に投票してください!)これが起こっていたことです:
私が確かに知っていること:
- 私のアプリケーションは、3年以上前にアプリにコーディングしたJRobin1.4を使用してデータを記録および表示します。
- アプリケーションの最もビジーなインスタンスは現在作成します
- 起動から1時間以内に1000を超える新しいJRobinデータベースファイル(それぞれ約1.3MB)
- 起動後、毎日100以上
- 何か書き込むものがある場合、アプリはこれらのJRobinデータベースオブジェクトを15秒ごとに更新します。
- デフォルト構成のJRobin:
java.nio
ベースのファイルアクセスバックエンドを使用します。このバックエンドMappedByteBuffers
はファイル自体にマップされます。- 5分ごとに1回、JRobinデーモンスレッドが
MappedByteBuffer.force()
すべてのJRobin基盤データベースMBBを呼び出します
pmap
リスト:- 6500マッピング
- 5500は1.3MBのJRobinデータベースファイルで、これは最大7.1GBになります。
最後のポイントは私の「ユーレカ!」でした。一瞬。
私の是正措置:
- 明らかに優れている最新のJRobinLite1.5.2に更新することを検討してください
- JRobinデータベースに適切なリソース処理を実装します。現時点では、アプリケーションがデータベースを作成し、データベースがアクティブに使用されなくなった後は、データベースをダンプしません。
MappedByteBuffer.force()
定期的なタイマーではなく、データベース更新イベントに移動してみてください。問題は魔法のように消えますか?- すぐに、JRobinバックエンドをjava.io実装に変更します(行の行を変更します)。これは遅くなりますが、おそらく問題ではありません。これは、この変更の直接の影響を示すグラフです。
JavaRSSメモリ使用グラフhttp://lanai.dietpizza.ch/images/stackoverflow-rss-problem-fixed.png
私が理解する時間があるかもしれないし、ないかもしれない質問:
- JVM内で何が起こっているの
MappedByteBuffer.force()
ですか?何も変更されていない場合でも、ファイル全体が書き込まれますか?ファイルの一部?最初にロードしますか? - 常にRSSに一定量のMBBがありますか?(RSSは、割り当てられたMBBサイズの合計の約半分でした。偶然の一致ですか?そうではないと思います。)
MappedByteBuffer.force()
定期的なタイマーではなく、データベース更新イベントに移動した場合、問題は魔法のように解消されますか?- RSSスロープがそれほど規則的だったのはなぜですか?これは、アプリケーションの負荷メトリックのいずれとも相関していません。
jvm - Linux (SL4) で定義されているデフォルトの JVM ヒープ サイズはどこにありますか
現在、SL4 クラスターで Sun の Java 1.6 を使用しています。
何らかの理由で、1.6 JVM が信じられないほど大きなヒープで起動し、起動できません。
たとえば -Xmx1800M で開始すると、問題なく動作します。それで、デフォルトのヒープサイズがどこに設定されているのか、さらに重要なことに、それを変更する方法は?
マシンには 8GB の物理メモリがあり、sun のサーバー JVM はデフォルトで最大 512M のメモリの半分で開始されるはずですが、1800M を超えて割り当てようとしているため、明らかにそうではありません。
編集: _JAVA_OPTIONS を使用できることはわかっていますが、これは少しぎこちなく感じます。プロパティ ファイルがどこかにあると思っていましたが、今のところ見つかりません。
java - ループを使用して多くの SMS を送信できない
GSM モデムを使用して PC から SMS を送信したいと考えています。この例を使用して、SMS を送信できます。ループを使用して多数のユーザーに SMS を送信したいのですが、うまくいきません。
私のエラー:
c++ - boost ::anyテストコードはSunCCでコンパイルされますが、g++ではコンパイルされません
次のうなずくテストコード:
SunのCCコンパイラとデフォルト設定を使用してコンパイルし、正常に動作します。ただし、g ++を使用すると、次のようになります。
これはg++バージョン3.4.3であるため、4.xバージョンでは異なる可能性があります。後で試してみます。これが、boost anyに「is_any」テンプレートが含まれていない理由ですか、それともコンパイラのバグですか?
インライン関数で期待するように、テンプレートを削除しても同じ結果が得られます。
java - Sun独自のJavaクラスを使用するのは悪い習慣ですか?
Sun独自のJavaクラスを使用すると、コンパイラは警告を表示します。私は、これらのクラスを使用することは一般的に悪い考えだと思います。私はこれをどこかで読んだ。ただし、警告以外に、警告を使用しない基本的な理由はありますか?
unix - Solaris の man ページからページ番号を削除しますか?
Solaris を使用すると、60 行ごとに次のようにページ番号が取得されます。
また、次のようなヘッダーが表示されます
それらを削除する方法はありますか? テキストを 1 行ずつ読んでいるときに、それらが表示されるのは気が散ります。
java - Clojure を実行するために使用できる Sun 以外の Java はどれですか?
プロジェクトの開発用 VM を構築するプロセスを自動化しているのですが、sun-java-6 を非対話型環境にインストールするのに非常に苦労しています。ClojureフレンドリーなJavaが行く限り、私の他のオプションは何ですか?
java - SCJPに何か良いものはありますか?
SUNがSCJPに利用できるグッズ(無料または有料)を提供しているかどうかを知りたいだけですか?マイクロソフトがそのようなグッズを提供しているように聞いた。誰かがこれについて何か考えを持っていますか?
乾杯、PK
java - Java EEまたはGlassfishを使用したNetbeans?
Glassfishを使用してNetbeansをダウンロードし、インストールしました。
次に、SunのサイトからJava EEをダウンロードする必要がありますか?
java - Oracle の下の NetBeans IDE
私は今読んだものについて少しおびえています。Java でプログラミングを開始したいので、いくつかの調査を行った結果、Swing GUI Designer の機能と Jasper Reports (iReport) による強力なレポート機能を備えた NetBeans が最適な IDE であるという結論に達しました。
しかし、Oracle (まもなく Sun を買収する予定) は、NetBeans に関心を持っていないようです。近いうちに Java で appz を構築する予定なので、次の点についてご意見をお聞かせください。
Oracle が NetBeans を廃止するという噂があっても、NetBeans を使い続けるか、それとも別の IDE を選択するか?
PS: 基本的には NetBeans が選択されますが、現在の状況を考えると、この決定には疑問があります。
ありがとうございました