Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > tomcat java.lang.OutOfMemoryError: Java heap spac


Автор: revelc 9.5.2008, 05:32
Вобщем суть проблемы такова есть машина на ней 1gb памяти стоит tomcat 5.5 система ubuntu 7.10

tomcat работает приблизительно 12 часов после этого случается ужасное.1. Вываливается ошибка:

В настройках tomcat прописано JAVA_OPTS="-Djava.awt.headless=true -Xmx512M"

Давно ищу решение проблемы не могу найти

Как вариант думал сделать рестарт tomcat через crontab каждые 3 часа не получается почемуто 2. Вываливается ошибка:

1. Вываливается ошибка:
java.lang.OutOfMemoryError: Java heap space
        at sun.util.resources.TimeZoneNamesBundle.createMap(TimeZoneNamesBundle.java:77)
        at sun.util.resources.OpenListResourceBundle.loadLookup(OpenListResourceBundle.java:110)
        at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(OpenListResourceBundle.java:97)
        at sun.util.resources.OpenListResourceBundle.handleGetObject(OpenListResourceBundle.java:58)
        at sun.util.resources.TimeZoneNamesBundle.handleGetObject(TimeZoneNamesBundle.java:59)
        at java.util.ResourceBundle.getObject(ResourceBundle.java:378)
        at java.util.ResourceBundle.getObject(ResourceBundle.java:381)
        at java.util.ResourceBundle.getStringArray(ResourceBundle.java:361)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:100)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:81)
        at java.util.TimeZone.getDisplayNames(TimeZone.java:399)
        at java.util.TimeZone.getDisplayName(TimeZone.java:350)
        at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1093)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:882)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:852)
        at java.text.DateFormat.format(DateFormat.java:316)
        at org.apache.tomcat.util.http.FastHttpDateFormat.getCurrentDate(FastHttpDateFormat.java:110)
        at org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1595)
        at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:967)
        at org.apache.coyote.Response.action(Response.java:181)
        at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573)
        at org.apache.coyote.Response.doWrite(Response.java:560)
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:314)
        at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:278)
        at org.apache.catalina.connector.Response.finishResponse(Response.java:484)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:154)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at java.util.ResourceBundle.getStringArray(ResourceBundle.java:361)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:100)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:81)
        at java.util.TimeZone.getDisplayNames(TimeZone.java:399)
        at java.util.TimeZone.getDisplayName(TimeZone.java:350)
        at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1093)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:882)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:852)
        at java.text.DateFormat.format(DateFormat.java:316)
        at org.apache.tomcat.util.http.FastHttpDateFormat.getCurrentDate(FastHttpDateFormat.java:110)
        at org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1595)
        at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:967)
        at org.apache.coyote.Response.action(Response.java:181)
        at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573)
        at org.apache.coyote.Response.doWrite(Response.java:560)
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:314)
        at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:278)
        at org.apache.catalina.connector.Response.finishResponse(Response.java:484)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:154)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
java.lang.OutOfMemoryError: Java heap space




Как вариант думал сделать рестарт tomcat через crontab каждые 3 часа не получается почемуто 2. Вываливается ошибка:
2. Вываливается ошибка:
08.05.2008 6:13:18 org.apache.coyote.http11.Http11BaseProtocol start SEVERE: Error starting endpoint java.net.BindExc$
May  8 06:13:18 mail jsvc.exec[31870]: eflect.Method.invoke(Method.java:597) ^Iat org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) ^Iat sun.r$
May  8 06:13:19 mail jsvc.exec[31870]: 08.05.2008 6:13:18 org.apache.catalina.startup.Catalina start SEVERE: Catalina.start:  LifecycleException:  service.g$
May  8 06:13:19 mail jsvc.exec[31870]: reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ^Iat java.lang.reflect.Method.invok$
May  8 06:13:19 mail jsvc.exec[31870]: 08.05.2008 6:13:19 org.apache.catalina.startup.Catalina start INFO: Server startup in 6555 ms
May  8 06:19:01 mail jsvc.exec[31870]: 08.05.2008 6:19:01 org.apache.coyote.http11.Http11BaseProtocol pause INFO: Pausing Coyote HTTP/1.1 on http-8180 08.05$
May  8 06:19:01 mail jsvc.exec[31870]: .reflect.NativeMethodAccessorImpl.invoke0(Native Method) ^Iat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMetho$
May  8 06:19:02 mail jsvc.exec[31870]: 08.05.2008 6:19:02 org.apache.catalina.core.StandardService stop INFO: Stopping service Catalina
May  8 06:19:03 mail jsvc.exec[31870]: 08.05.2008 6:19:03 org.apache.catalina.connector.MapperListener destroy WARNING: Error unregistering MBeanServerDeleg$
May  8 06:19:03 mail jsvc.exec[31870]: t sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ^Iat java.lang.reflect.Method$
May  8 06:19:03 mail jsvc.exec[31870]: 08.05.2008 6:19:03 org.apache.coyote.http11.Http11BaseProtocol destroy INFO: Stopping Coyote HTTP/1.1 on http-8180
May  8 06:19:03 mail jsvc.exec[31870]: 08.05.2008 6:19:03 org.apache.catalina.connector.Connector stop SEVERE: Coyote connector has not been started
May  8 06:19:03 mail jsvc.exec[31870]: 08.05.2008 6:19:03 org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: Failed shutdown of Apache Porta$
May  8 06:19:09 mail jsvc.exec[32016]: java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap (Unsupported major.minor version 49.0)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.lang.ClassLoader.defineClass0(Native Method)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.lang.ClassLoader.defineClass(ClassLoader.java:539)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.net.URLClassLoader.access$100(URLClassLoader.java:55)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.net.URLClassLoader$1.run(URLClassLoader.java:194)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.security.AccessController.doPrivileged(Native Method)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.net.URLClassLoader.findClass(URLClassLoader.java:187)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.lang.ClassLoader.loadClass(ClassLoader.java:289)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat java.lang.ClassLoader.loadClass(ClassLoader.java:235)
May  8 06:19:09 mail jsvc.exec[32016]: ^Iat org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:107)
May  8 06:19:09 mail jsvc.exec[32016]: Cannot load daemon


Помогите не знаю че делать

Автор: Kangaroo 9.5.2008, 10:44
Цитата(revelc @  9.5.2008,  05:32 Найти цитируемый пост)
tomcat работает приблизительно 12 часов после этого случается ужасное.1. Вываливается ошибка:

Надо разобраться, что кушает память, а потом не отпускает ее. Может JConsole такое позволяет, попробуй.

Автор: Aoli 9.5.2008, 15:43
Это известная утечка памяти в sun jvm из-за ошибки в класслоадере.

У нас после 12ти дневной работы сервера с 4мя гигами памяти под sun jvm 1.5.0_11 кончалась память.
Рекомендую попробовать другую jvm, например jikes или от ibm.
Мы перешли на jikes, хоть он и платный. Сервер тьфу-тьфу-тьфу 3ий месяц работает.

Автор: Zamuta 9.5.2008, 21:28
revelc, дебажить не пробовали? Как сказали выше смотрите через JConsole .


Aoli, это теперь на всех sun jvm 1.5.0_11 через 12 дней память кончается  smile ? Если криво написано... сами понимаете.

Автор: Aoli 9.5.2008, 22:40
Zamuta, если постоянно загружаются Коллекции  сервер стоит под хорошей нагрузкой, то да.
Прежде чем говорить о кривости чьего-то кода в следующий раз рекомендую подумать и почитать что-нибудь по теме, например http://blogs.sun.com/fkieviet/entry/classloader_leaks_the_dreaded_java и http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6287811 .

Автор: sidslog 12.5.2008, 16:19
http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror

Автор: revelc 16.5.2008, 20:00
Огромное спасибо за отзывы ао теме вобщем на счет кривости кода могусказать что он не идеален но могу сказать точно что утечка памяти происходит походу в самой jvm sun к стати вот что еще помогает на некоторое время такая фича только ее очень сложно пробить когда надо вставлять если код огромный .Нужно найти в каком месте произошла ошибка и сделать в этом месте try где в catch написать system.gs(); -принудительно запустить сборщик мусора.

Еще вот что пришлось сделать в ubuntu 7.10 tomcat из репозитория еще просит устоновить tomcat-webapps -вот собственно изза етого у меня его и не получалось рестартовать через cron я откатил томкат до 5 версии и все сразу заработало рестарт каждые 3 часа.

Если у кого получилось победить java.lang.OutOfMemoryError: Java heap spac напишите как плиз . И вам точно поставят памятник при жизни.

Автор: Maksym 16.5.2008, 20:34
revelc
Dump смотреть пробовали, через http://www.alphaworks.ibm.com/tech/heapanalyzer/download? Полезная инфа по теме: http://www.alphaworks.ibm.com/tech/heapanalyzer, http://www-1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q1=heapdump+solaris&uid=swg21190608&loc=en_US&cs=utf-8&lang=en.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)