Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему "упал" мой java-сайт? (есть дамп потоков) / 12 сообщений из 12, страница 1 из 1
14.06.2007, 11:29:20
    #34593999
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Всем здравствуйте!

Ситуация такая.

Сегодня ночью упал наш java-сайт. Симптомы были такие: при попытке запросить любую страницу tomcat очень долго пытался ее загрузить, и страницу так и не отдавал. В логах (catalina.out и прочие) ничего при этом не писалось.

Сделал дамп потоков в это время: 214 разных потоков ждали лок <0x00002aaab9e0c260> в состоянии BLOCKED . Поток, который забрал этот лок залип в состоянии RUNNABLE на операции java.util.LinkedHashMap.createEntry .

Вот этот поток:
Код: 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.
"http-8080-Processor536" daemon prio= 10  tid=0x00002aabbe780400 nid=0x7d3e runnable [0x0000000051d43000..0x0000000051d44d20]
   java.lang.Thread.State: RUNNABLE
	at java.util.LinkedHashMap.createEntry(Unknown Source)
	at java.util.LinkedHashMap.addEntry(Unknown Source)
	at java.util.HashMap.put(Unknown Source)
	at net.sf.ehcache.store.MemoryStore.put(MemoryStore.java: 107 )
	- locked <0x00002aaab9e0c3f0> (a net.sf.ehcache.store.LruMemoryStore)
	at net.sf.ehcache.Cache.put(Cache.java: 569 )
	- locked <0x00002aaab9e0c260> (a net.sf.ehcache.Cache)
	at net.sf.ehcache.Cache.put(Cache.java: 522 )
	at org.hibernate.cache.EhCache.put(EhCache.java: 120 )
	at org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java: 81 )
	at org.hibernate.loader.Loader.putResultInQueryCache(Loader.java: 2119 )
	at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java: 2063 )
	at org.hibernate.loader.Loader.list(Loader.java: 2021 )
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java: 95 )
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java: 1562 )
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java: 283 )
	at net.liga.persistence.dao.NewsDao.updateList(NewsDao.java: 597 )
	at net.liga.persistence.dao.NewsDao.find(NewsDao.java: 396 )
	at net.liga.rss.RssGenerator.getItemsList(RssGenerator.java: 283 )
	at net.liga.rss.RssGenerator.getChannel(RssGenerator.java: 172 )
	at net.liga.rss.RssGenerator.generateRss(RssGenerator.java: 128 )
	at net.liga.rss.RssGeneratorServlet.doGet(RssGeneratorServlet.java: 55 )
	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.StandardWrapperValve.invoke(StandardWrapperValve.java: 213 )
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 178 )
	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(Unknown Source) 
Вот информация о хипе из дампа потоков:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Heap
 PSYoungGen      total 947840K, used 665728K [0x00002aab622f0000, 0x00002aabaeb10000, 0x00002aabb7840000)
  eden space 665728K,  100 % used [0x00002aab622f0000,0x00002aab8ad10000,0x00002aab8ad10000)
  from space 282112K,  0 % used [0x00002aab9c830000,0x00002aab9c830000,0x00002aabadbb0000)
  to   space 289920K,  0 % used [0x00002aab8ad10000,0x00002aab8ad10000,0x00002aab9c830000)
 PSOldGen        total 2796224K, used 2796222K [0x00002aaab7840000, 0x00002aab622f0000, 0x00002aab622f0000)
  object space 2796224K,  99 % used [0x00002aaab7840000,0x00002aab622ef9c0,0x00002aab622f0000)
 PSPermGen       total 112704K, used 112401K [0x00002aaaae240000, 0x00002aaab5050000, 0x00002aaab7840000)
  object space 112704K,  99 % used [0x00002aaaae240000,0x00002aaab50047d8,0x00002aaab5050000)

Здесь видно, что OldGen и PermGen использованы на 99%, при этом в лог так и не выдавалось никаких ошибок (ни OutOfMemory, ни PermGen space error, ничего).

Полный стекдамп приложен в аттачменте

Используемые технологии:
Код: plaintext
1.
2.
Java 6u1
Tomcat 5.5.20
SuSe Linux 10.1

Помогите пожалуйста разобраться, что произошло! И как устранить, чтобы больше это не повторялось...

Заранее большое спасибо!
...
Рейтинг: 0 / 0
14.06.2007, 12:04:00
    #34594122
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
типичный дедлок, по-моему, при конкурентном заполнении мапы... попробуй использовать мапу из пакета concurent или сделай синхронизацию потоков
...
Рейтинг: 0 / 0
14.06.2007, 12:16:09
    #34594170
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Vetal
Здесь видно, что OldGen и PermGen использованы на 99%, при этом в лог так и не выдавалось никаких ошибок (ни OutOfMemory, ни PermGen space error, ничего).

Это не значит что OOM не было. имхо, на 99% он был.
...
Рейтинг: 0 / 0
14.06.2007, 15:12:58
    #34594966
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
y3uтипичный дедлок, по-моему, при конкурентном заполнении мапы... попробуй использовать мапу из пакета concurent или сделай синхронизацию потоков
Я не понимаю, почему. Вот кусок дампа потоков:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	at java.util.LinkedHashMap.createEntry(Unknown Source)
	at java.util.LinkedHashMap.addEntry(Unknown Source)
	at java.util.HashMap.put(Unknown Source)
	at net.sf.ehcache.store.MemoryStore.put(MemoryStore.java: 107 )
	- locked <0x00002aaab9e0c3f0> (a net.sf.ehcache.store.LruMemoryStore)
	at net.sf.ehcache.Cache.put(Cache.java: 569 )
	- locked <0x00002aaab9e0c260> (a net.sf.ehcache.Cache)
	at net.sf.ehcache.Cache.put(Cache.java: 522 )

Вот код метода java.util.LinkedHashMap.createEntry:
Код: plaintext
1.
2.
3.
4.
5.
6.
     void  createEntry( int  hash, K key, V value,  int  bucketIndex) {
        HashMap.Entry<K,V> old = table[bucketIndex];
	Entry<K,V> e =  new  Entry<K,V>(hash, key, value, old);
        table[bucketIndex] = e;
        e.addBefore(header);
        size++;
    } 

Там же не на чем зациклиться!! Я не понимаю, почему поток не может выйти из этого метода?

Смотрим теперь кусок кода метода net.sf.ehcache.Cache.put(Cache.java:569):
Код: plaintext
1.
2.
         synchronized  ( this ) {
            memoryStore.put(element);
        }

Как мы видим, верхушка стека находится как раз внутри блока synchronized...

В общем, непонятно, почему поток не вышел из метода createEntry. Судя по информации о heap, это произошло в момент, когда памяти свободной уже не было. Могли лы поток в метода createEntry залипнуть из-за того, что закончилась память?

А что касается переписывания с использованием concurrent... Как видно из стека, глюк находится в системных файлах различных технологий, которым мы используем. Исходя из этого, ничего мы переписывать не можем...

Помогите, пожалуйста, хотя-бы понять, почему поток залип в методе java.util.LinkedHashMap.createEntry? Могло ли это быть из-за того, что память закончилась?

Спасибо!
...
Рейтинг: 0 / 0
14.06.2007, 15:13:37
    #34594972
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Timm Vetal
Здесь видно, что OldGen и PermGen использованы на 99%, при этом в лог так и не выдавалось никаких ошибок (ни OutOfMemory, ни PermGen space error, ничего).

Это не значит что OOM не было. имхо, на 99% он был.
И именно из за этого мог залипунть поток таким образом, как он залипнул в стек-дампе?
...
Рейтинг: 0 / 0
14.06.2007, 15:14:21
    #34594975
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
TimmЭто не значит что OOM не было
Кстати, а каким образом может такое быть, что реально утечка памяти, а никаких Exception в лог не пишется??
...
Рейтинг: 0 / 0
14.06.2007, 15:17:27
    #34594989
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Vetal TimmЭто не значит что OOM не было
Кстати, а каким образом может такое быть, что реально утечка памяти, а никаких Exception в лог не пишется??
Да никаких дедлоков там быть не может.
Сообщения о OOM может не попасть в лог к примеру, когда не хватает памяти на проброс эксепшна.
...
Рейтинг: 0 / 0
14.06.2007, 15:25:29
    #34595028
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Vetalглюк находится в системных файлах различных технологий, которым мы используем. Исходя из этого, ничего мы переписывать не можем..
- скажем прямо: кэш в Hibernate сожрал всю память и парализовал работу Tomcat :(

- уменьшайте размер кэша или увеличивайте память доступную JVM
...
Рейтинг: 0 / 0
14.06.2007, 15:27:17
    #34595034
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
TimmСообщения о OOM может не попасть в лог к примеру, когда не хватает памяти на проброс эксепшна.
Зато на дамп потоков вполне хватило :)
...
Рейтинг: 0 / 0
21.06.2007, 12:49:50
    #34610466
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Kachalov Vetalглюк находится в системных файлах различных технологий, которым мы используем. Исходя из этого, ничего мы переписывать не можем..
- скажем прямо: кэш в Hibernate сожрал всю память и парализовал работу Tomcat :(
- уменьшайте размер кэша или увеличивайте память доступную JVM
А с чего вы взяли, что виноват кеш в Hibernate?? С чего это видно?
Если сложить все кеш регионы - получается 10 430 ячеек. Оперативной памяти под сервер выделено 4Гб. Думаете, такой небольшой объем ячеек может положить весь сервер?
...
Рейтинг: 0 / 0
22.06.2007, 02:10:01
    #34612472
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
- как "ячейки" соотносятся с байтами?
...
Рейтинг: 0 / 0
22.06.2007, 12:39:29
    #34613355
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему "упал" мой java-сайт? (есть дамп потоков)
Kachalov- как "ячейки" соотносятся с байтами?
Ну, одна ячейка может содержать, по моим оценкам до 10Кбайт
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему "упал" мой java-сайт? (есть дамп потоков) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]