簡體   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