2

こんにちは、Sun アプリケーション サーバー 8.2 ドメインを再起動した後、このエラーに遭遇することがあります。

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:255) での javax.servlet.ServletExceptionソース不明) (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(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) 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.org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) で java.security.AccessController.doPrivileged(Native Method) で (ApplicationDispatcher.java:95) を実行します。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)----- 根本原因 ----- com.sun.security.auth.PolicyFile の java.security.AccessController.doPrivileged(Native Method) での java.lang.StackOverflowError .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.com.sun.security.auth.PolicyPermissions.init(PolicyFile.java:1416) の auth.PolicyFile.getPermissions(PolicyFile.java:869) 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の呼び出し間で常に制限されていますか?

本当に無限に再帰的な問題であることを確認するためにできることの1つは、スタックサイズを増やすことです。クラッシュしたときに、ループセクションが拡張して残りのスペースを埋めるのがわかります。それ以外の場合は、スタックが不足しているだけです...特に、アプリケーションサーバーフレームワーク自体からスタックに30または40フレームがすでにある場合に発生します。

デフォルトのスタックサイズは256kです。

たとえば-Xss2M、2MBのスタックを取得するために、JVM引数を適用することでこれを増やすことができます。

これは、恒久的な解決策としてではなく、問題を確認するためだけに行ってください。

于 2008-12-14T12:17:08.983 に答える