简体   繁体   English

Java Stackoverflow错误

[英]Java Stackoverflow Error

Hi sometimes i encoutner this error after restarsting sun application server 8.2 domain anyone have any idea what could be the reason? 嗨,有时我在重命名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) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282) at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257) at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterCha 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) 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) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:417) at org.apache.catalina.core.ApplicationDispatcher.access$000(ApplicationDispatcher.java:80) at org.apache.catalina.core.ApplicationDispatcher$PrivilegedForward.run(ApplicationDispatcher.java:95) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:448) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:339) at org.apache.catalina.core.StandardHostValve 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 .throwable(StandardHostValve.java:282) at org.apache.catalina.core.StandardHostValve.postInvoke(StandardHostValve.java:184) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:552) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:189) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess(ProcessorTask.java:604) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475) at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:371) at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:264) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281) at com.sun.enterprise.web.connector.grizzly.WorkerThrea 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)----- Root Cause -----java.lang.StackOverflowError at java.security.AccessController.doPrivileged(Native Method) at com.sun.security.auth.PolicyFile.getPermissions(PolicyFile.java:818) at 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) at java.security.AccessControlContext.goCombiner(AccessControlContext.java:390) at java.security.AccessControlContext.optimize(AccessControlContext.java:304) at java.security.AccessController.checkPermission(AccessController.java:426) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.security.Security.getProperty(Security.java:724) at com.sun.security.auth.PolicyFile.initPolicyFile(PolicyFile.java:356) at com.sun.security.auth.Po 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) licyFile.init(PolicyFile.java:269) at com.sun.security.auth.PolicyFile.getPermissions(PolicyFile.java:869) at com.sun.security.auth.PolicyPermissions.init(PolicyFile.java:1416) at com.sun.security.auth.PolicyPermissions.elements(PolicyFile.java:1429) at javax.security.auth.SubjectDomainCombiner.combineJavaxPolicy(SubjectDomainCombiner.java:366) at javax.security.auth.SubjectDomainCombiner.combine(SubjectDomainCombiner.java:191) 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 …ad inifinitum

Infinite recursion. 无限递归。

This is evident by your long, repeating backtrace. 通过长时间的重复回溯可以明显看出这一点。 The fact that you receive a stack overflow error also supports this. 您收到堆栈溢出错误的事实也支持这一点。

My guess is something with your security policy is triggering an infinitely recursive operation. 我的猜测是您的安全策略正在触发无限递归操作。 Though there does not appear to be any application code involved, so it's hard to say for sure. 尽管似乎没有涉及任何应用程序代码,所以很难确定。 Is the repeating section always bounded between calls to SubjectDomainCombiner? 重复部分是否始终在对SubjectDomainCombiner的调用之间受到限制?

One thing you can do you confirm it's truly an infinitely recursive problem is to increase the stack size. 您可以确认这确实是一个无限递归问题的一件事是增加堆栈大小。 You should see the looping section expand to fill the remainder of the space when it does crash. 您应该看到循环部分展开,以在崩溃时填充剩余的空间。 Otherwise, you're just running low on stack... it does happen, especially when you've already got 30 or 40 frames on the stack from the application server framework itself. 否则,您的堆栈就快用完了……确实会发生,尤其是当您已经从应用程序服务器框架本身获得30或40帧的堆栈时。

The default stack size is 256k. 默认堆栈大小为256k。

You can increase it by applying the JVM argument, for example -Xss2M to get 2MB of stack. 您可以通过应用JVM参数来增加它,例如-Xss2M以获得2MB的堆栈。

Do this just to confirm the problem, not as a permanent solution. 这样做只是为了确认问题,而不是作为永久解决方案。

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

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