[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 メーリングリストの案内