繁体   English   中英

Java Stackoverflow错误

[英]Java Stackoverflow Error

嗨,有时我在重命名sun应用程序服务器8.2域后会收到这个错误,但有人知道这是什么原因吗?

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

…ad inifinitum

无限递归。

通过长时间的重复回溯可以明显看出这一点。 您收到堆栈溢出错误的事实也支持这一点。

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

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

默认堆栈大小为256k。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM