2

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

javax.servlet.ServletException at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:255) at javax.servlet.http.HttpServlet.service(HttpServlet.java:860) at sun.reflect.GeneratedMethodAccessor156.invoke( Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil .java:249) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 在 org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java :282) 在 org.apache.catalina.core.ApplicationFilterChain 的 org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)。internalDoFilter(ApplicationFilterChain.java:257) at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161) at java .security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723) at 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。在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) 在 org.apache.catalina.core.StandardHostValve 的 java.security.AccessController.doPrivileged(Native Method) 运行(ApplicationDispatcher.java:95)。 custom(StandardHostValve.java:448) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:339) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:282) at 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.lang.StackOverflowError at java.security.AccessController.doPrivileged(Native Method) at com.sun.security.auth.PolicyFile .getPermissions(PolicyFile.java:818) 在 javax.security.auth。SubjectDomainCombiner$3.run(SubjectDomainCombiner.java:357) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.SubjectDomainCombiner.combineJavaxPolicy(SubjectDomainCombiner.java:353) at 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 的 com.sun.security.auth.PolicyFile.init(PolicyFile.java:269)。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)

… 无限期

4

2 回答 2

4

无限递归。

这从您漫长的、重复的回溯中可以看出。您收到堆栈溢出错误的事实也支持这一点。

于 2008-11-28T05:18:47.147 回答
2

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

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

默认堆栈大小为 256k。

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

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

于 2008-12-14T12:17:08.983 回答