[Seasar-user:21226] Re: アプリケーションサーバのCPU高騰
市川 尚也
[E-MAIL ADDRESS DELETED]
2011年 12月 22日 (木) 17:17:01 JST
お世話になっております。
n_ichikawa2000です。
前回のご回答から期間があいてしまい申し訳ありません。
先日、当該事象が再度発生し、スレッドダンプの再取得を行いました。
前回のHttpServletRequestとは別のクラスで、CPU使用率が高いことがスレッドダン
プ上、確認できました。
SubApplicationScopeHandlerImplのsaveValueToScopeは複数のスレッドから利用され
てしまうことは有り得るのでしょうか。
また基本的なことかもしれませんが、「自分でスレッド起動して確認する」とは、
具体的にどのようなやり方で確認を行えばいいのでしょうか。
以下、CPU使用率が高いスレッドのスレッドダンプです。
"AJPRequestHandler-RMICallHandler-180" prio=10 tid=0x82e8d800 nid=0xfe0
runnable [0x828fe000]
java.lang.Thread.State: RUNNABLE
at java.util.HashMap.put(HashMap.java:374)
at
org.seasar.teeda.extension.html.impl.SubApplicationScopeHandlerImpl.saveValu
eToScope(SubApplicationScopeHandlerImpl.java:63)
at
org.seasar.teeda.extension.html.impl.SubApplicationScopeHandlerImpl.toScope(
SubApplicationScopeHandlerImpl.java:45)
at
org.seasar.teeda.extension.html.impl.HtmlViewHandler.renderView(HtmlViewHand
ler.java:165)
at
org.seasar.teeda.extension.html.impl.HtmlViewHandler.renderView(HtmlViewHand
ler.java:141)
at
org.seasar.teeda.core.lifecycle.impl.RenderResponsePhase.executePhase(Render
ResponsePhase.java:38)
at
org.seasar.teeda.core.lifecycle.AbstractPhase.execute(AbstractPhase.java:57)
at
org.seasar.teeda.core.lifecycle.LifecycleImpl.render(LifecycleImpl.java:131)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
at
com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.ja
va:64)
at
jp.co.lifecard.webdesk.framework.filter.WebDeskTrimFilter.doFilter(WebDeskTr
imFilter.java:27)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.ja
va:15)
at
jp.co.lifecard.webdesk.framework.filter.WebDeskSessionFilter.doFilter(WebDes
kSessionFilter.java:32)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.ja
va:17)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployF
ilter.java:69)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.ja
va:17)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2Container
Filter.java:64)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.ja
va:17)
at
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsF
ilter.java:122)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.ja
va:17)
at
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
at
com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispa
tcher.java:642)
at
com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletReq
uestDispatcher.java:391)
at
com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHand
ler.java:908)
at
com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandle
r.java:458)
at
com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
at
com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
at
oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketRea
dHandler.java:260)
at
com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableRe
sourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:662)
-----Original Message-----
From: [E-MAIL ADDRESS DELETED]
[mailto:[E-MAIL ADDRESS DELETED]]On Behalf Of Koichi Kobayashi
Sent: Thursday, December 15, 2011 3:25 AM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:21210] Re: アプリケーションサーバのCPU高騰
小林 (koichik) です.
> スレッドダンプを確認したところ、
> EvermindHttpServletRequest.setAttribute、
> EvermindHttpServletRequest.getAttribute
> が繰り返しコールされているスレッドが多数ありました。
HttpServletRequest は通常スレッド固有のものなので
同期化されませんが,複数のスレッドから利用することも
ないはずです.
本当に HttpServletRequest の get/setAttribute() で
CPU 高騰が発生しているなら,HttpServletRequest 自体の
使い方に問題があることになりますね.
自分でスレッド起動して HttpServletRequest を渡したり
していないか確認してみては?
On Wed, 14 Dec 2011 18:38:45 +0900, 市川 尚也 <[E-MAIL ADDRESS DELETED]>
wrote:
> お世話になっております。
> n_ichikawa2000と申します。
>
> タイトルの件の問題が発生しており、
> 何かしら情報が得られればと思い投稿致します。
> こちらで質問するのは的外れかもしれませんが、宜しくお願いします。
>
> 【使用バージョン】
> s2-framework-2.4.17.jar
> s2-extension-2.4.17.jar
> s2-dao-1.0.46.jar
> teeda-core-1.0.11-SP1.jar
> teeda-extention-1.0.11-SP1.jar
>
> 【問題】
> 本番運用中に、OracleApplicationServerにて、CPU100%となりサーバがダウン
してしまう問題が発生。
> スレッドダンプを確認したところ、
> EvermindHttpServletRequest.setAttribute、
> EvermindHttpServletRequest.getAttribute
> が繰り返しコールされているスレッドが多数ありました。
>
> ※スレッドダンプ自体はネットワークを繋げられる環境ではない為、一文のみ記載
しておきます。
>
> "AJPRequestHandler-RMICallHandler-620" prio=10 tid=0x5552
runnable[0x80c95000]
> java.lang.Thread.State:RUNNABLE
> at java.util.HashMap.get(HashMap.java:303)
> at
com.evermind.server.http.EvermindHttpServletRequest.getAttribute(EvermindHtt
pServletRequst.java:3226)
> at
javax.servlet.ServletRequestWrapper.getAttribute(ServletRequestWrapper.java:
127)
> at
org.seaser.framework.container.external.servlet.ServletRequestMap.getAttribu
te(ServletRequestMap.java:46)
> at
org.seaser.framework.container.external.AbstractExternalContextMap.put(Abstr
actExternalContextMap.java:97)
>
> 【検証状況】
> サポートからは、HashMapの使い方がスレッドセーフであるか確認して欲しいとの
回答がありました。
> 当方で使用しているHashMapを洗い出しましたが、Collections.synchronizedMapで
宣言しており、
> スレッドセーフであると言えると思われます。
> そのほかの発生原因には何が考えられますでしょうか。
> またそのほか、足りない情報があれば指摘して頂きたいです。
>
> 宜しくお願いします。
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
_______________________________________________
Seasar-user mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内