java - Openfire 因 Java 错误而崩溃

标签 java linux nginx chat openfire

我在我的服务器上运行基于 openfire 的聊天系统,但是确实遇到了很多与 openfire java 环境相关的崩溃,我已经将 java VM 内存增加到 512MB,但当服务器负载超过时它仍然崩溃,

我没有很多用户,一次只有 20,30 个,拥有非常强大的 8 核 cpu,32 GB 内存

我正在运行 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 

最佳答案

这个错误似乎与内存不足没有直接关系——通常Java中的内存错误是OutOfMemoryError错误或指永久代空间有限等。

NullPointerException另一方面,异常几乎肯定是执行代码中的编程错误。由于在您的情况下,这似乎是在负载下发生的,因此我可以在黑暗中拍摄几张照片:

  • 某些有限资源(例如线程池或事件队列)正在耗尽,并且使用它的代码不会检查该情况。

  • 存在竞争条件,其中代码的某些部分会遇到通常由负载较轻的另一个线程初始化的未初始化结构。

  • 到达某个超时时间,返回 null,然后未正确处理。

请注意,由于垃圾收集器运行频率或多或少的影响,虚拟机可用的内存量可能影响各种操作的时间。您可以使用分析器,例如 VisualVM ,判断您的应用程序是否内存不足。

关于java - Openfire 因 Java 错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508444/

相关文章:

c - 在 .rodata 和 .rodata1 中检索偏移量、字符串和虚拟地址

linux - mmap:使用多线程时的性能

nginx - 带有 Nginx conf 的未知指令 "proxy_cache_revalidate on"

ubuntu - 在 Ubuntu 上使用 Nginx 服务多个站点

java - JFrame 中的 JButton 对齐

java - .jar 文件移走后出现 NoClassDefFoundError 异常

java - 如何在JAVA中从一个点增大/缩小一个圆?

java - 如何从java中的长值获取12小时格式的时间

linux - "ls"是否有限制文件名字符的选项?

node.js - 如何配置我的 Nodejs 应用程序以仅响应 SSL 连接?