0

Glassfish v2を使用していますが、Tomcatでも同じ問題が発生しています。

サーバーが起動すると、次のように表示されます。

sudo jmap -histo:live 14127 | grep KVStore
6222:             1             24  xxx.xxx.KVStore

しばらく使用すると、次のようになります。

sudo jmap -histo:live 14127 | grep KVStore
7240:             1             24  xxx.xxx.KVStore
7360:             1             24  xxx.xxx.KVStore

これはGlassfishのスケールアウトと関係があると思いますが、KVStoreをメモリ内ストレージクラスとして使用しているため、これは非常に問題があります。

これは、静的ハッシュテーブルとゲッターおよびセッターを備えたシングルトンクラスです。

class KVStore
    public static KVStore kvstore;
    public Hashtable hash;

ここで問題となるのは、1つのクラスでの問題です。ストアに電話してサーブレットを取得すると、オブジェクトは問題なく受信されます。ただし、2つのクラスまたはKVStoreを使用すると、サーブレットは2つを交互に使用し、呼び出しが連続して行われたときに正しく返されることはありません。

今、私は本当にオブジェクトをメモリに保存する必要があります。このクラスを強制的に1回だけロードするにはどうすればよいですか?または、グローバルにアクセス可能なハッシュテーブルを作成しますか?

最後に、jrubyのwarbledwarファイルをデプロイしています。これが実際に発生する可能性がない場合は、お知らせください。代わりに調査します。

4

2 に答える 2

0

まだバグがあるので、これは完全な答えではありません。

https://stackoverflow.com/questions/5785531/jruby-typeerror-assigning-non-exception-to

しかし、jmapを使用して、単一のシングルトンを作成しました。

Javaで真のシングルトンを作成する方法は?

具体的には:

http://surguy.net/articles/communication-across-classloaders.xml

これはハックです。

于 2011-04-26T03:24:49.647 に答える
0

わかりました、fml。ほとんどの場合、これが必要です。

config.webxml.jruby.min.runtimes = 1
config.webxml.jruby.max.runtimes = 1

あなたのwarble.rbでそれを良いと呼んでください。

于 2011-04-26T22:28:07.437 に答える