| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 Помогите не знаю че делать |
| Автор: 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 дней память кончается |
| Автор: 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. |