|
|
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Все потоки моего приложения зависли на методе java.net.SocketInputStream.socketRead0, и израсходовали все доступные потоки на tomcat-сервере. Среда: Apache Tomcat 5.5.20, java1.6_01, Apache Commons Http Client. Дамп потока (все остальные такие же) приведу внизу темы. После залипания всех потоков на этом методе сделал lsof -p 4613 (4613 - id томкета. Эта команда позволяет посмотреть все файлы и сокеты, открытые данным указанным процессом) Увидел, что там очень много строк следующего типа: java 4613 root 1906u IPv6 303362 TCP shrek.office.myorg.net:http-alt->cover.myorg.net:58162 (CLOSE_WAIT) java 4613 root 1907u IPv6 302767 TCP shrek.office.myorg.net:http-alt->cover.myorg.net:57358 (CLOSE_WAIT) java 4613 root 1908u IPv6 302774 TCP shrek.office.myorg.net:http-alt->cover.myorg.net:57365 (CLOSE_WAIT) java 4613 root 1909u IPv6 302783 TCP shrek.office.myorg.net:http-alt->cover.myorg.net:57382 (CLOSE_WAIT) И вот такого типа: java 4613 root 689u IPv6 277188 TCP shrek.office.myorg.net:33121->shrek.office.myorg.net:http-alt (ESTABLISHED) java 4613 root 690u IPv6 277187 TCP shrek.office.myorg.net:http-alt->shrek.office.myorg.net:33121 (ESTABLISHED) java 4613 root 691u IPv6 277191 TCP shrek.office.myorg.net:58069->shrek.office.myorg.net:http-alt (ESTABLISHED) java 4613 root 692u IPv6 277190 TCP shrek.office.myorg.net:52543->shrek.office.myorg.net:http-alt (ESTABLISHED) Здесь shrek - это текущий java-сервер. cover - стоящий впереди Apache Server с которого java иногда забирает страницы для вставки в текущую страницу. Что можно сделать? Как исправить ситуацию и заставить нормально работать сайт? Всем заранее спасибо! Привожу дамп потоков, а вслед за ним код проблемных методов: "http-8080-Processor1617 been through net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter" daemon prio=10 tid=0x1d81a800 nid=0x1cc7 runnable [0xfad64000..0xfad66150] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) - locked <0xebfd77a0> (a java.io.BufferedInputStream) at org.apache.commons.httpclient.HttpParser.readRawLine(Unknown Source) at org.apache.commons.httpclient.HttpParser.readLine(Unknown Source) at org.apache.commons.httpclient.HttpConnection.readLine(Unknown Source) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(Unknown Source) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(Unknown Source) at org.apache.commons.httpclient.HttpMethodBase.readResponse(Unknown Source) at org.apache.commons.httpclient.HttpMethodBase.execute(Unknown Source) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Unknown Source) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(Unknown Source) at org.apache.commons.httpclient.HttpClient.executeMethod(Unknown Source) at org.apache.commons.httpclient.HttpClient.executeMethod(Unknown Source) at net.myorg.commons.HttpGetter.runGetCore(HttpGetter.java:46) at net.myorg.commons.HttpGetter.getFromURLAsStream(HttpGetter.java:65) at net.myorg.commons.HttpGetter.getFromCachedUrl(HttpGetter.java:129) at net.myorg.portal.webClipping.View.pageBeginRender(View.java:36) at org.apache.tapestry.AbstractPage.firePageBeginRender(AbstractPage.java:478) at org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:268) at org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:366) at org.apache.tapestry.portlet.PortletRendererImpl.renderPage(PortletRendererImpl.java:75) at $PortletRenderer_1156ae882e2.renderPage($PortletRenderer_1156ae882e2.java) at org.apache.tapestry.portlet.PortletHomeService.service(PortletHomeService.java:80) at $IEngineService_1156ae882cc.service($IEngineService_1156ae882cc.java) at org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:66) at org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:248) at org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60) at $WebRequestServicer_1156ae8829a.service($WebRequestServicer_1156ae8829a.java) at $WebRequestServicer_1156ae88298.service($WebRequestServicer_1156ae88298.java) at org.apache.tapestry.portlet.RenderRequestServicerToWebRequestServicerBridge.service(RenderRequestServicerToWebRequestServicerBridge.java:49) at $RenderRequestServicer_1156ae88292.service($RenderRequestServicer_1156ae88292.java) at $RenderRequestServicer_1156ae880a0.service($RenderRequestServicer_1156ae880a0.java) at org.apache.tapestry.portlet.ApplicationPortlet.render(ApplicationPortlet.java:161) at org.apache.jetspeed.factory.JetspeedPortletInstance.render(JetspeedPortletInstance.java:103) at org.apache.jetspeed.container.JetspeedContainerServlet.doGet(JetspeedContainerServlet.java:265) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499) at org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke(ServletPortletInvoker.java:245) at org.apache.jetspeed.container.invoker.ServletPortletInvoker.render(ServletPortletInvoker.java:128) at org.apache.pluto.PortletContainerImpl.renderPortlet(PortletContainerImpl.java:119) at org.apache.jetspeed.container.JetspeedPortletContainerWrapper.renderPortlet(JetspeedPortletContainerWrapper.java:121) at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.execute(RenderingJobImpl.java:242) at org.apache.jetspeed.aggregator.impl.PortletRendererImpl.renderNow(PortletRendererImpl.java:226) at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:147) at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:143) at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.build(PageAggregatorImpl.java:78) at org.apache.jetspeed.aggregator.AggregatorValve.invoke(AggregatorValve.java:46) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.aggregator.HeaderAggregatorValve.invoke(HeaderAggregatorValve.java:53) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.decoration.DecorationValve.invoke(DecorationValve.java:130) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.resource.ResourceValveImpl.invoke(ResourceValveImpl.java:130) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke(ActionValveImpl.java:184) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.container.ContainerValve.invoke(ContainerValve.java:104) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke(ProfilerValveImpl.java:248) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.security.impl.LoginValidationValveImpl.invoke(LoginValidationValveImpl.java:159) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke(PasswordCredentialValveImpl.java:150) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke(LocalizationValveImpl.java:170) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run(AbstractSecurityValve.java:138) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:454) at org.apache.jetspeed.security.JSSubject.doAsPrivileged(JSSubject.java:179) at org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke(AbstractSecurityValve.java:132) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.container.url.impl.PortalURLValveImpl.invoke(PortalURLValveImpl.java:66) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke(CapabilityValveImpl.java:126) at org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(JetspeedPipeline.java:167) at org.apache.jetspeed.pipeline.JetspeedPipeline.invoke(JetspeedPipeline.java:146) at org.apache.jetspeed.engine.JetspeedEngine.service(JetspeedEngine.java:227) at org.apache.jetspeed.engine.JetspeedServlet.doGet(JetspeedServlet.java:242) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.jetspeed.engine.servlet.XXSUrlAttackFilter.doFilter(XXSUrlAttackFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at net.sf.ehcache.constructs.web.filter.CachingFilter.buildPage(CachingFilter.java:211) at net.sf.ehcache.constructs.web.filter.CachingFilter.buildPageInfo(CachingFilter.java:164) at net.sf.ehcache.constructs.web.filter.CachingFilter.doFilter(CachingFilter.java:130) at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:92) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:619) Вот код класса HttpGetter: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:56:41 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Провел некоторые дополнительные исследования. Вот кусок вывода команды netstat на сервере с tomcat: авторtcp 1 0 shrek.office.l:http-alt cover.myorg.net:55502 CLOSE_WAIT root 288761 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:57038 CLOSE_WAIT root 290028 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:51918 CLOSE_WAIT root 272289 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:59085 CLOSE_WAIT root 304085 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:60109 CLOSE_WAIT root 304895 4613/java tcp 689 0 shrek.office.l:http-alt cover.myorg.net:61133 CLOSE_WAIT root 0 - tcp 1 0 shrek.office.l:http-alt cover.myorg.net:51917 CLOSE_WAIT root 298591 4613/java tcp 0 0 shrek.office.l:http-alt shrek.office.myorg:56297 ESTABLISHED root 277299 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:52685 CLOSE_WAIT root 286352 4613/java tcp 0 0 shrek.office.l:http-alt shrek.office.myorg:45801 ESTABLISHED root 269690 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:65484 CLOSE_WAIT root 283379 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:57548 CLOSE_WAIT root 290480 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:57804 CLOSE_WAIT root 290702 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:54476 CLOSE_WAIT root 300697 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:55756 CLOSE_WAIT root 301614 4613/java tcp 1 0 shrek.office.l:http-alt cover.myorg.net:56780 CLOSE_WAIT root 302386 4613/java Все остальные потоки так же само - либо CLOSE_WAIT на cover.myorg.net (Http-сервер, большинство потоков), либо ESTABLISHED на шрек (tomcat-сервер, я с текущего сервера тоже забираю другие страницы по http для формирования текущей) На сервере с Apache netstat никаких соединений на сервер с tomcat не выдает. Кстати, я использую технологию apache httpClient, попробую перейти на UrlConnection от jdk, может поможет (если проблема в апачевском клиенте). Меня интересует следующее. Обьясните, чего все-таки потоки залипли в socketRead0? Ведь файловых дескрипторов (и сокетных, соответственно) я выставил 65536 на процесс, а java-процесс съел только две с половиной тысячи. Чего этим потокам залипать, если файловых ресурсов ему еще хватает? В чем причина зависания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 22:36:09 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Be sure to always read the entirety of the data and call close on the stream. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 00:44:29 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Ну и плюс к тому, releaseConnection() реально сокет не закрывает. HttpClient там, где может, использует Keep-Alive. С одной стороны, Вы могли воспользоваться этим, чтобы реюзать коннекты в своем коде, с другой - если оно сильно мешает, используйте, например, HTTP-1.0 или HttpConnectionManager. Кстати, тупой include не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 01:10:14 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
GooogleКстати, тупой include не поможет? Извините за безграмотность, но что такое include? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 19:29:44 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Vetal GooogleКстати, тупой include не поможет? Извините за безграмотность, но что такое include? PortletContext.include(); Есть такой JSR-168 - так вот Pluto, входящий в JetSpeed 2 - как раз таки его реализация. Поищите ради интереса в гугле IFramePortlet, может и его хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 00:35:23 |
|
||
|
Почему все java-потоки моего сайта зависли на java.net.SocketInputStream.socketRead0?
|
|||
|---|---|---|---|
|
#18+
Нашел, что в одном из наших методов отпускание соединение было не в блоке finally. Взял в блок finally. Кроме того, для соединений использовались разные технологии: в одних местах UrlConnection из JDK, в других Apache HttpClient. Перевел все на UrlConnection. В итоге стоит уже двое суток. Пока-что ни одного залипшего сокета. Буду надеятся, что так и останется! Всем большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 16:42:29 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2144367]: |
0ms |
get settings: |
12ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
15ms |
get first new msg: |
10ms |
get forum data: |
4ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 423ms |
| total: | 618ms |

| 0 / 0 |
