- PR -

Tomcat アプリケーションハングについて

投稿者投稿内容
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-05 15:57
TP-Processor280 のスタックトレースは恐らくブラウザからのリクエストを読み取っているところですね。
このスレッドすら何度スレッドダンプをとっても同じ所で固まっているようでしたらそれこそ Tomcat より低レベルなところで固まっているものと考えられます。

既に試されているかもしれませんが、結構厄介な現象のようですからまずは検証用の環境で同じ設定、構成にして負荷をかけて現象を再現させましょう。
再現できれば、スレッドモデルなり、JVMなり、スレッド数なりを変更して状況に変化があるか確認できますね。

VM レベルの問題かもしれないので、今後の保険の意味も含めて最新版の 1.4.2_13 にアップデートするのもいいかもしれません。
http://java.sun.com/j2se/1.4.2/download.html

[ メッセージ編集済み 編集者: インギ 編集日時 2006-12-05 16:09 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-12-05 23:54
引用:

ひじきさんの書き込み (2006-12-05 15:17) より:
OS まわりのことはあまり詳しくないのですが、NPTLとはスレッドの種類のことでしょうか?
環境変数に追加するのでしょうか?
export LD_ASSUME_KERNEL=X.X.XX



そうです。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html
LD_ASSUME_KERNELの説明はここに書いてありました。

NPTLは以前のLinuxThreadsとは違いカーネルの手助けを必要とするため、
必要とする機能が未対応なカーネルのバージョンを指定することで
特定の最適化やNPTL自体を無効化することができます。

引用:

現在どういう問題があって、どういう設定をすると、どういう効果があるのかお教えいただけますでしょうか。



Redhat 9はNPTLを使った最初のディストリビューションですし、
NPTLはもともと2.6系のカーネル向けで、2.4系はバックポートな位置づけです。

前の書き込みのリンクの現象はRedhat EL 3では発生しないようですし、
JVMではなく、Native Thread側の問題な可能性もあるということです。
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2006-12-06 17:35
あしゅさん非常に勉強になります。

先ほど当該サーバのカーネルバージョンを確認しました。
2.4.20-9smp

なお LD_ASSUME_KERNEL に設定する値ですが、ちょっと調べてみましたところ、
export LD_ASSUME_KERNEL=2.4.19
などと指定すれば LinuxThread にて動作するようですが妥当なバージョンなのでしょうか?

あと、この変更を加えた際のリスクが気になるところです。
(サービスが動作しなくなる、アプリケーションが動作しなくなるなど)
「ちょっとやってみるか」というレベルで安易に変更するのはまずいですよね?
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-01-12 12:20
引用:

M レベルの問題かもしれないので、今後の保険の意味も含めて最新版の 1.4.2_13 にアップデートするのもいいかもしれません。
http://java.sun.com/j2se/1.4.2/download.html


保険のためアップデートしましたが、問題は解決されませんでした...
本日再発。

以下スレッドダンプです。
-----
Full thread dump Java HotSpot(TM) Server VM (1.4.2_13-b06 mixed mode):

"TP-Processor256" daemon prio=1 tid=0x08449e38 nid=0x1925 waiting on condition [0x75a14000..0x75a15414] <- 気になる
at xxx.xxx.xxxxx.online.business.isd.dao.ISDSubDAO.findByPrimaryKey(ISDSubDAO.java:93)
at xxx.xxx.xxxxx.online.business.isd.control.ISDSubControl.getISDSub(ISDSubControl.java:91)
at xxx.xxx.xxxxx.online.business.ieh.control.IEHDetailControl.createIEHDetailValue(IEHDetailControl.java:689)
at xxx.xxx.xxxxx.online.business.ieh.control.IEHDetailControl.judgeResult(IEHDetailControl.java:421)
at xxx.xxx.xxxxx.online.presentation.facade.ieh.ItemInspectionFacade.judgeResult(ItemInspectionFacade.java:56)
at xxx.xxx.xxxxx.online.presentation.web.xxxxx.inspection.enforcement.daily.JudgeInputValueAction.execute(JudgeInputValueAction.java:145)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.MultipartFilter.doFilter(MultipartFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.AuthFilter.doFilter(AuthFilter.java:156)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.CounterManagingFilter.doFilter(CounterManagingFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.CharactorEncodingFilter.doFilter(CharactorEncodingFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

"TP-Processor255" daemon prio=1 tid=0x08449278 nid=0x1924 waiting for monitor entry [0x75995000..0x75995494]
at org.apache.tomcat.util.threads.ThreadPool.returnController(ThreadPool.java:439)
- waiting to lock <0x57140020> (a org.apache.tomcat.util.threads.ThreadPool)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:710)
at java.lang.Thread.run(Thread.java:534)

"TP-Processor254" daemon prio=1 tid=0x084486b8 nid=0x1923 waiting on condition [0x75914000..0x75915514]
at xxx.xxx.xxxxx.online.business.isd.dao.ISDSubDAO.findByPrimaryKey(ISDSubDAO.java:93)
at xxx.xxx.xxxxx.online.business.isd.control.ISDSubControl.getISDSub(ISDSubControl.java:91)
at xxx.xxx.xxxxx.online.business.ieh.control.IEHDetailControl.createIEHDetailValue(IEHDetailControl.java:689)
at xxx.xxx.xxxxx.online.business.ieh.control.IEHDetailControl.judgeResult(IEHDetailControl.java:421)
at xxx.xxx.xxxxx.online.presentation.facade.ieh.ItemInspectionFacade.judgeResult(ItemInspectionFacade.java:56)
at xxx.xxx.xxxxx.online.presentation.web.xxxxx.inspection.enforcement.daily.JudgeInputValueAction.execute(JudgeInputValueAction.java:145)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.MultipartFilter.doFilter(MultipartFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.AuthFilter.doFilter(AuthFilter.java:156)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.CounterManagingFilter.doFilter(CounterManagingFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at xxx.xxx.xxxxx.online.presentation.web.filter.CharactorEncodingFilter.doFilter(CharactorEncodingFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

ほぼ同様のため中略

"TP-Monitor" daemon prio=1 tid=0x6b4398f0 nid=0x443 waiting for monitor entry [0x6d07f000..0x6d07f294]
at org.apache.tomcat.util.threads.ThreadPool.checkSpareControllers(ThreadPool.java:413)
- waiting to lock <0x57140020> (a org.apache.tomcat.util.threads.ThreadPool)
at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:569)
at java.lang.Thread.run(Thread.java:534)

"TP-Processor4" daemon prio=1 tid=0x6b439788 nid=0x442 waiting on condition [0x6cffe000..0x6cfff314] <- 気になる
at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1030)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:803)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:775)
at java.text.DateFormat.format(DateFormat.java:274)
at java.text.Format.format(Format.java:133)
at java.text.MessageFormat.subformat(MessageFormat.java:1272)
at java.text.MessageFormat.format(MessageFormat.java:784)
at java.util.logging.SimpleFormatter.format(SimpleFormatter.java:50)
- locked <0x56bdec30> (a java.util.logging.SimpleFormatter)
at java.util.logging.StreamHandler.publish(StreamHandler.java:178)
- locked <0x56b8cb90> (a java.util.logging.ConsoleHandler)
at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:87)
at java.util.logging.Logger.log(Logger.java:424)
at java.util.logging.Logger.doLog(Logger.java:446)
at java.util.logging.Logger.logp(Logger.java:562)
at org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:91)
at org.apache.commons.logging.impl.Jdk14Logger.error(Jdk14Logger.java:119)
at org.apache.tomcat.util.threads.ThreadPool.logFull(ThreadPool.java:371)
at org.apache.tomcat.util.threads.ThreadPool.findControlRunnable(ThreadPool.java:330)
- locked <0x57140020> (a org.apache.tomcat.util.threads.ThreadPool)
at org.apache.tomcat.util.threads.ThreadPool.runIt(ThreadPool.java:308)
at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:646)
at org.apache.jk.common.SocketAcceptor.runIt(ChannelSocket.java:847)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

"http-8080-Monitor" prio=1 tid=0x6b7e7de8 nid=0x42f in Object.wait() [0x6cdff000..0x6cdff514]
at java.lang.Object.wait(Native Method)
- waiting on <0x56af0750> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:559)
- locked <0x56af0750> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
at java.lang.Thread.run(Thread.java:534)

"http-8080-Processor25" daemon prio=1 tid=0x6b7e7298 nid=0x42e runnable [0x6cd7f000..0x6cd7f594]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
- locked <0x56af07d8> (a java.net.PlainSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:448)
at java.net.ServerSocket.accept(ServerSocket.java:419)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:368)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:549)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

"http-8080-Processor24" daemon prio=1 tid=0x6b7e6748 nid=0x42d in Object.wait() [0x6ccff000..0x6ccff614]
at java.lang.Object.wait(Native Method)
- waiting on <0x56af0940> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
at java.lang.Object.wait(Object.java:429)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:655)
- locked <0x56af0940> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
at java.lang.Thread.run(Thread.java:534)

ほぼ同様のため中略

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=1 tid=0x6bbecc08 nid=0x412 waiting on condition [0x6b69b000..0x6b69b214]
at java.lang.Thread.sleep(Native Method)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1597)
at java.lang.Thread.run(Thread.java:534)

"Signal Dispatcher" daemon prio=1 tid=0x080c8460 nid=0x336 waiting on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=1 tid=0x080c4158 nid=0x31f in Object.wait() [0x4135b000..0x4135b594]
at java.lang.Object.wait(Native Method)
- waiting on <0x56af16a0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
- locked <0x56af16a0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=1 tid=0x080c3db8 nid=0x31e in Object.wait() [0x412db000..0x412db614]
at java.lang.Object.wait(Native Method)
- waiting on <0x56af0060> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:429)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
- locked <0x56af0060> (a java.lang.ref.Reference$Lock)

"main" prio=1 tid=0x08057e20 nid=0x30a runnable [0xbfffb000..0xbfffc0f8]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
- locked <0x571405c0> (a java.net.PlainSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:448)
at java.net.ServerSocket.accept(ServerSocket.java:419)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:513)
at org.apache.catalina.startup.Catalina.await(Catalina.java:619)
at org.apache.catalina.startup.Catalina.start(Catalina.java:579)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

"VM Thread" prio=1 tid=0x080c3360 nid=0x31d runnable

"VM Periodic Task Thread" prio=1 tid=0x080cc948 nid=0x33a waiting on condition
"Suspend Checker Thread" prio=1 tid=0x080c7ad0 nid=0x335 runnable

-----

なお、ISDSubDAO.java の 93 行目には次のようなプログラムが書かれています。
ResultSet より値を取得し、Object を生成しているだけなのですが...

return value = new XXXValue(
new XXXPKValue(
rs.getString(i++),
rs.getString(i++),
rs.getInt(i++),
rs.getString(i++)),
rs.getString(i++),
rs.getInt(i++),
rs.getString(i++),
rs.getString(i++),
rs.getInt(i++),
rs.getTimestamp(i++),
rs.getTimestamp(i++));

この部分にてほぼすべてのスレッドが止まっているような気がします。


引用:

LD_ASSUME_KERNELで試して見るのが良さそうだと思うのですが。


こちらもまだ怖くて、試せてません。

[ メッセージ編集済み 編集者: ひじき 編集日時 2007-01-12 12:21 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-12 13:39
以前の org.apache.struts.action.Action.isTokenValid で止まっているスレッドはないということでしょうか?
また、今回はスレッドダンプは複数回取得されましたか?
一回取っただけでは固まっているのか動いているのかどうかも確認できません。

「気になる 」とありますが、どういった理由で気になるのでしょうか?

あと、繰り返しになりますがスレッド数を減らした方が良いかと。

VM の問題も疑われますので、VM 自体を JRockit 等別の実装に変えてみるのもよいかもしれませんね。
http://commerce.bea.com/products/weblogicjrockit/jrockit_prod_fam.jsp

[ メッセージ編集済み 編集者: インギ 編集日時 2007-01-12 13:44 ]
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-01-12 13:56
ご回答ありがとうございます。
引用:

インギさんの書き込み (2007-01-12 13:39) より:
以前の org.apache.struts.action.Action.isTokenValid で止まっているスレッドはないということでしょうか?


isTokenValid 部分(2重押し防止処理)を暫定的にはずしてみたところ、
今度は上記部分にて発生した次第です。

あしゅさんの言うように Native Thread側に問題があるかもしれません。

引用:

インギさんの書き込み (2007-01-12 13:39) より:
また、今回はスレッドダンプは複数回取得されましたか?
一回取っただけでは固まっているのか動いているのかどうかも確認できません。


4回ほど取得しましたが、状態はすべて同様でした。

引用:

インギさんの書き込み (2007-01-12 13:39) より:
「気になる 」とありますが、どういった理由で気になるのでしょうか?


xxx.xxx.xxxxx.online.business.isd.dao.ISDSubDAO.findByPrimaryKey(ISDSubDAO.java:93)
同じ部分で9割以上のスレッドが waiting on condition となっておりましたので
ここに何かしらの原因があるのではないかというレベルです。

java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1030)
については初めて出てきたクラスなのでこれまでの問題と関係があるのではないかと思った次第です。

「気になる」にあまり根拠はないですね。すみません。

引用:

あと、繰り返しになりますがスレッド数を減らした方が良いかと。


御指摘ありがとうございます。
何かのタイミングにて 100 くらいに落とすように致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-12 14:20
なるほど。

>「気になる」にあまり根拠はないですね。すみません。
いえいえ、何度取っても同じ箇所で止まっているのであれば確かに気になりますね。

ただ、止まっている箇所が様々なのでコーディングレベルの問題ではなさそうですね。
やはり VM とかスレッド周りの問題ではないでしょうか。
VM のネイティブコードの最適化の問題であれば Sun の VM の場合、Client と Server のオプションを切り換えることでとりあえず回避出来ることもあります。

そういえば再現テストをするとのことでしたが、テスト環境では再現できなかったのでしょうか?

[ メッセージ編集済み 編集者: インギ 編集日時 2007-01-12 14:28 ]
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-01-12 14:32
引用:

インギさんの書き込み (2007-01-12 14:20) より:
ただ、止まっている箇所が様々なのでコーディングレベルの問題ではなさそうですね。
やはり VM とかスレッド周りの問題ではないでしょうか。
VM のネイティブコードの最適化の問題であれば Sun の VM の場合、Client と Server のオプションを切り換えることでとりあえず回避出来ることもあります。


勉強になります。試してみます。
現時点の起動オプションとして以下を指定しておりますので

export CATALINA_OPTS="-server -Xms512m -Xmx512m -XX:NewRatio=1 -XX:SurvivorRatio=1 -verbose:gc -XX:+PrintGCTimeStamps -Xloggc:/var/log/xxx/gc.log"

を次に変えてみます。

export CATALINA_OPTS="-Xms512m -Xmx512m -XX:NewRatio=1 -XX:SurvivorRatio=1 -verbose:gc -XX:+PrintGCTimeStamps -Xloggc:/var/log/xxx/gc.log"

引用:

テスト環境で負荷を掛けて現象を再現させてみるのも良いですね。
より大胆に設定や VM を変更してテストできますから。


本番環境と同一の開発環境を構築するのはちょっと難しいですが
極力試す方向で考えます。

スキルアップ/キャリアアップ(JOB@IT)