【问题标题】:Java Stackoverflow ErrorJava Stackoverflow 错误
【发布时间】:2008-11-28 05:15:13
【问题描述】:

您好,有时我在重新启动 sun 应用程序服务器 8.2 域后遇到此错误,有人知道可能是什么原因吗?

javax.servlet.ServletException 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:255) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:860) 在 sun.reflect.GeneratedMethodAccessor156.invoke(未知 来源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:585) 在 org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249) 在 java.security.AccessController.doPrivileged(本机 方法)在 javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 在 org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282) 在 org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257) 在 org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55) 在 org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161) 在 java.security.AccessController.doPrivileged(本机 方法)在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484) 在 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:417) 在 org.apache.catalina.core.ApplicationDispatcher.access$000(ApplicationDispatcher.java:80) 在 org.apache.catalina.core.ApplicationDispatcher$PrivilegedForward.run(ApplicationDispatcher.java:95) 在 java.security.AccessController.doPrivileged(本机 方法)在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) 在 org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:448) 在 org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:339) 在 org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:282) 在 org.apache.catalina.core.StandardHostValve.postInvoke(StandardHostValve.java:184) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:552) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) 在 org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933) 在 org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:189) 在 com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess(ProcessorTask.java:604) 在 com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475) 在 com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:371) 在 com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:264) 在 com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281) 在 com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83)----- 根本原因 -----java.security.AccessController.doPrivileged 处的 java.lang.StackOverflowError(本机 方法)在 com.sun.security.auth.PolicyFile.getPermissions(PolicyFile.java:818) 在 javax.security.auth.SubjectDomainCombiner$3.run(SubjectDomainCombiner.java:357) 在 java.security.AccessController.doPrivileged(本机 方法)在 javax.security.auth.SubjectDomainCombiner.combineJavaxPolicy(SubjectDomainCombiner.java:353) 在 javax.security.auth.SubjectDomainCombiner.combine(SubjectDomainCombiner.java:191) 在 java.security.AccessControlContext.goCombiner(AccessControlContext.java:390) 在 java.security.AccessControlContext.optimize(AccessControlContext.java:304) 在 java.security.AccessController.checkPermission(AccessController.java:426) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 在 java.security.Security.getProperty(Security.java:724) 在 com.sun.security.auth.PolicyFile.initPolicyFile(PolicyFile.java:356) 在 com.sun.security.auth.PolicyFile.init(PolicyFile.java:269) 在 com.sun.security.auth.PolicyFile.getPermissions(PolicyFile.java:869) 在 com.sun.security.auth.PolicyPermissions.init(PolicyFile.java:1416) 在 com.sun.security.auth.PolicyPermissions.elements(PolicyFile.java:1429) 在 javax.security.auth.SubjectDomainCombiner.combineJavaxPolicy(SubjectDomainCombiner.java:366) 在 javax.security.auth.SubjectDomainCombiner.combine(SubjectDomainCombiner.java:191)

……无限期

【问题讨论】:

    标签: java stack-overflow


    【解决方案1】:

    Infinite recursion.

    您的冗长重复回溯很明显。您收到stack overflow 错误的事实也支持这一点。

    【讨论】:

      【解决方案2】:

      我的猜测是您的安全策略触发了无限递归操作。虽然似乎没有涉及任何应用程序代码,所以很难确定。重复部分是否总是在对 SubjectDomainCombiner 的调用之间有界?

      您可以做的一件事是增加堆栈大小,以确认它确实是一个无限递归问题。您应该会看到循环部分在崩溃时展开以填充剩余空间。否则,您只是在堆栈上运行不足......它确实会发生,尤其是当您已经从应用程序服务器框架本身获得 30 或 40 帧时。

      默认堆栈大小为 256k。

      您可以通过应用 JVM 参数来增加它,例如 -Xss2M 以获得 2MB 的堆栈。

      这样做只是为了确认问题,而不是作为永久解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        • 2011-12-19
        • 2011-12-26
        相关资源
        最近更新 更多