powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему "упал" мой java-сайт? (есть дамп потоков)
12 сообщений из 12, страница 1 из 1
Почему "упал" мой java-сайт? (есть дамп потоков)
    #34593999
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здравствуйте!

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

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

Это не значит что OOM не было. имхо, на 99% он был.
...
Рейтинг: 0 / 0
Почему "упал" мой java-сайт? (есть дамп потоков)
    #34594966
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему "упал" мой java-сайт? (есть дамп потоков)
    #34594972
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm Vetal
Здесь видно, что OldGen и PermGen использованы на 99%, при этом в лог так и не выдавалось никаких ошибок (ни OutOfMemory, ни PermGen space error, ничего).

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

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


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