0

サーバーで openfire ベースのチャット システムを実行していますが、openfire Java 環境に関連する多くのクラッシュが発生します。既に Java VM メモリを 512 MB に増やしていますが、サーバーの負荷が超過するとクラッシュします。

非常に強力な 8 コア CPU と 32 GB メモリを使用して、一度に 20,30 人しか使用できないユーザーは多くありません

私はopenfire 3.71を実行しています。openfireを再起動しても問題はまったく解決しないため、サーバー全体を再起動する必要があります。

私がJavaで得るエラーは

java.lang.ExceptionInInitializerError
    at org.jivesoftware.admin.LoginLimitManager.getInstance(LoginLimitManager.java:48)
    at org.jivesoftware.openfire.admin.login_jsp._jspService(login_jsp.java:143)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
    at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
    at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:74)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
    at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
    at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
    at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:494)
    at org.eclipse.jetty.server.session.SessionHandler.handle(SessionHandler.java:182)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:933)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
    at org.eclipse.jetty.server.Server.handle(Server.java:334)
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
    at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at org.jivesoftware.util.TaskEngine.scheduleAtFixedRate(TaskEngine.java:228)
    at org.jivesoftware.admin.LoginLimitManager.(LoginLimitManager.java:83)
    at org.jivesoftware.admin.LoginLimitManager.(LoginLimitManager.java:33)
    at org.jivesoftware.admin.LoginLimitManager$LoginLimitManagerContainer.(LoginLimitManager.java:39)
    ... 36 more 
4

1 に答える 1

0

このエラーは、メモリ不足に直接関係しているようには見えません。通常、Java のメモリ エラーはOutOfMemoryErrorエラーであるか、永続的な世代などの限られたスペースを参照しています。

NullPointerException一方、例外はほぼ確実に、実行されたコードのプログラミング エラーです。あなたの場合、これは負荷がかかっているように見えるので、暗闇の中でいくつかのショットを撮ることができます:

  • スレッド プールやイベント キューなど、枯渇しつつある有限のリソースがあり、それを使用するコードはその状態をチェックしません。

  • コードの一部が、通常は負荷が軽い別のスレッドによって初期化される初期化されていない構造にヒットする競合状態があります。

  • タイムアウトに達しており、nullそれを返すと、適切に処理されません。

VM で使用できるメモリの量は、ガベージ コレクターが多かれ少なかれ頻繁に実行されるため、さまざまな操作のタイミングに影響を与える可能性があることに注意してください。VisualVMなどのプロファイラーを使用して、アプリケーションがメモリ不足かどうかを判断できます。

于 2012-11-22T08:44:41.927 に答える