12

.NetのAppDomainに似たJava抽象化があるかどうか知りたいです。

特に、Coldfusion / J2EEサーバーでは、メモリリークが遅く、まだ簡単に追跡できないため、数日ごとに再起動する必要があることがわかったので、興味があります。これにより、実行時間の長いプロセスが台無しになる可能性があります。特定の期間/メモリのしきい値を超えたときに、新しいJVMにユーザーをゆっくりとプッシュする方法が本当に必要です。

私の限られた.Netの経験から、これは、メモリ不足に陥ったAppDomainをリサイクルすることにより、IISとAppDomainがかなりシームレスに管理できる状況の1つであると確信しています。このシナリオを支援するAppDomainsを利用できない場合は、お知らせください。

助言がありますか?

4

3 に答える 3

12

ここでのYiannisの答えは少し誤解を招くと思います。単に「いいえ、できません」と言うだけでは、すべてではありません。質問は、サーバープロセスでJavaクラスをアンロードして、プロセスを再起動せずにJVMプロセスからリークコードを削除することに焦点を当てています。OPは、AppDomainが提供するプロセスのようなメモリ分離機能を要求していませんが、実行中のJVMでクラスをアンロードする機能を要求しています。内部的にはAppDomainはプロセスではないので、プロセスのように言いますが、ファーストクラスのプロセスがオペレーティングシステムによって提供される分離の側面のいくつかを楽しんでいます。言及されている分離JSRは、この「プロセスのような」分離を指します。JVMをホストしているOSプロセスを循環させることなく、Java ClassLoader、つまりクラスをアンロードすることが可能です。ここでは、いくつかの方法について説明します。SO 148681。Javaでこれを行うのは簡単でもエレガントでもありませんが、それは可能です。

于 2009-09-12T02:24:15.747 に答える
8

残念だけど違う。

Javaの世界での類似の概念は、JSR 121で最初に登場したIsolateです。これは、同じJVMで実行されている異なるアプリケーション間の安全な分離と通信を可能にする将来のJVM機能のAPIでした。JSRが公開された後(2004年頃)、Sunの1つの研究チームがバルセロナプロジェクトに取り組みました。このプロジェクトは、SunのHotSpot1.5VMにIsolationAPIを実装しようとしました。2年後、彼らはSPARC/Solarisのプロトタイプをリリースしました。安定性の問題のため、Windows/Linuxバージョンはリリースされませんでした。

最近、SUNはJ2MEにIsolation APIの限定バージョンを導入し、積極的に提供しなかった環境で「複数のプロセス」を提供することに重点を置いています。最近、SunにIsolate APIを標準JVMに実装する際のステータスについても尋ねました。彼らの回答は、サポートが制限されたJVMをリリースする予定であるというものでした。それらは、Isolatesをロード/アンロードする機能を提供することを計画していますが、それらの間で通信する機能はありません。

また、JanosVM(java 1.1)と呼ばれるIsolates互換のJVMバージョンを構築するための古い研究努力がありましたが、今日ではそれが役に立たないと思います。

お役に立てれば...

于 2009-07-17T14:47:01.387 に答える
0

時間またはメモリ消費量の増加やメモリ使用量のしきい値などの特定の基準に基づいて個々のJVMをリサイクルすることは、私が使用しているAppServerの高度なバージョンであるWebSphereの機能です。App Serverにその機能がない場合は、その関数のようなものを提供するためにいくつかのシェルスクリプトを作成することが実行可能であるはずです。

これは、次のことを前提として非常にうまく機能します。

a)。ユーザーからの要求は、より多くのJVMセットにスプレーされます。b)。すべての要求がステートレスであるか、状態レプリケーション機能があること。レプリケーションはWebSphereとWebLogicの機能ですが、他のアプリサーバーにもその機能があると思います。

このような環境では、ユーザーを他のサーバーに「ゆっくり」移動する必要はありません。1つのサーブ/JVMを安全に停止できること、およびこれらのセッションが別のインスタンスで取得されることを知っておく必要があります。

于 2009-06-29T07:02:47.930 に答える