Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Thread creation failed: Insufficient user memory / 6 сообщений из 6, страница 1 из 1
02.08.2007, 10:38:33
    #34700271
BesZP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
Есть основной поток, в нем запускается еще два потока, в которых в цикле запускаются другие потоки занимающиеся вставкой данных в базу данных (максимум сколько может быть потоков замимающихся вставкой данных - 2, т.е. всего, на два родительских потока - 4). Все работает, но в определенный момент я получаю ошибку:
Код: plaintext
1.
2.
3.
4.
5.
6.
Thread creation failed: Insufficient user memory
java.lang.OutOfMemoryError: unable to create  new   native  thread
        at java.lang.Thread.start( Native  Method)
        at extract.enscribe.load.db.Loader.load(Loader.java: 186 )
        at extract.enscribe.thread.LoaderThead.run(LoaderThead.java: 14 )
        at java.lang.Thread.run(Thread.java: 536 )

Прямо перед возникновением бага делал вывод информации о количестве свободной памяти, показало: 155515360 байт, т.е. 155Мб - т.е. свободной памяти хоть зашибись, чего ему не хватает?

Запуск приложения осуществляю с такими опциями: -Xms192m -Xmx256m

Если выставляю максимальный размер кучи больше 256Мб, то приложение вообще не хочет запускаться, что тоже вызывает у меня вопрос: Почему?

Добавил еще опцию -Xss512k и получил баг:
Код: plaintext
1.
Exception in thread "CompileThread0" java.lang.OutOfMemoryError: requested  245400  bytes

Блин, что делать???
...
Рейтинг: 0 / 0
02.08.2007, 12:21:56
    #34700777
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
Код: plaintext
-Xms512k
точно k, а не m?
http://www.egilh.com/blog/archive/2006/06/09/2811.aspx
+ покажи тред дамп
JDK 6 либо 5u12, так? кррасава :)
я про стек трейс при OOM .
...
Рейтинг: 0 / 0
02.08.2007, 13:55:30
    #34701210
BesZP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
Timm
Код: plaintext
-Xms512k
точно k, а не m?
http://www.egilh.com/blog/archive/2006/06/09/2811.aspx
+ покажи тред дамп
JDK 6 либо 5u12, так? кррасава :)
я про стек трейс при OOM .

Как снять тред дамп?

не, у меня еще круче - 1.4.1_05
апгрейдить не могу, т.к. железо специфическое и под него нет новой версии

Запускаю с опциями -Xms128m -Xmx192m -Xss64k - работает дольше, но все равно валится

Как я понимаю мне просто не хватает системной памяти! Система не может отхватить кусочек от JVM, т.е. разделять с ней кусок памяти?

-XX:PermSize - как я понимаю с помощью этой опции устанавливается размер памяти в которой будут находиться статические объекты, правильно? Статические методы будут использоватьть этот же участок памяти или другой?
...
Рейтинг: 0 / 0
02.08.2007, 14:08:33
    #34701257
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
BesZP
не, у меня еще круче - 1.4.1_05
?? первый раз вижу стек трейс от ООМ. обычно все падает без него...
BesZPКак снять тред дамп?
Ctrl+Break в консоли под Win
kill -3 <pid> на никс.

сколько памяти на машине? попробуй убрать все опции. потом постепенно увеличивай Xmx. остальные не трогай.
BesZP-XX:PermSize - как я понимаю с помощью этой опции устанавливается размер памяти в которой будут находиться статические объекты, правильно? Статические методы будут использоватьть этот же участок памяти или другой?
в поиск. permanent generation.
...
Рейтинг: 0 / 0
02.08.2007, 17:02:11
    #34702076
BesZP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
Как узнать сколько потоков заблокировано?

Timm
kill -3 <pid> на никс.


Получил кучу вот такого:
Код: plaintext
1.
2.
3.
4.
5.
6.
"Thread-25758" prio= 5  tid=0x1a970bf0 nid=0x64a5 waiting  for  monitor entry [19dd3000..19dd3970]
        at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java: 786 )
        - waiting to lock <d83c608> (a oracle.jdbc.driver.T4CConnection)
        at extensions.jdbc.DML.insert(DML.java: 33 )
        at extract.enscribe.thread.InserterThread.run(InserterThread.java: 104 )
        at java.lang.Thread.run(Thread.java: 536 )

а в конце:
Код: 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.
"Thread-2" prio= 5  tid=0x1689ef80 nid=0xd runnable [168d6000..168d6970]
        at com.tandem.ext.enscribe.EnscribeFile.Gread( Native  Method)
        at com.tandem.ext.enscribe.EnscribeFile.read(EnscribeFile.java: 1335 )
        at extract.enscribe.load.db.Loader.load(Loader.java: 88 )
        at extract.enscribe.thread.LoaderThead.run(LoaderThead.java: 14 )
        at java.lang.Thread.run(Thread.java: 536 )

"Signal Dispatcher" daemon prio= 10  tid=0x16365580 nid=0x9 runnable [ 0 .. 0 ]

"Finalizer" daemon prio= 8  tid=0x16361308 nid=0x6 in Object.wait() [ 8116000 .. 8116970 ]
        at java.lang.Object.wait( Native  Method)
        - waiting on <d7c0378> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java: 111 )
        - locked <d7c0378> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java: 127 )
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java: 159 )

"Reference Handler" daemon prio= 10  tid=0x16361020 nid=0x5 in Object.wait() [80f6000..80f6970]
        at java.lang.Object.wait( Native  Method)
        - waiting on <d7c02a0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java: 426 )
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java: 113 )
        - locked <d7c02a0> (a java.lang.ref.Reference$Lock)

"main" prio= 5  tid=0x8159768 nid=0x1 in Object.wait() [4fffe000..4ffff414]
        at java.lang.Object.wait( Native  Method)
        - waiting on <d7e3c20> (a java.lang.Thread)
        at java.lang.Thread.join(Thread.java: 1008 )
        - locked <d7e3c20> (a java.lang.Thread)
        at java.lang.Thread.join(Thread.java: 1061 )
        at extract.enscribe.load.db.TestLoader.main(TestLoader.java: 37 )

"VM Thread" prio= 5  tid=0x163605b8 nid=0x4 runnable

"VM Periodic Task Thread" prio= 10  tid=0x16364290 nid=0x7 waiting on condition
"Suspend Checker Thread" prio= 10  tid=0x16364bc0 nid=0x8 runnable
...
Рейтинг: 0 / 0
02.08.2007, 17:12:55
    #34702117
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread creation failed: Insufficient user memory
BesZPПолучил кучу вот такого:
Точное количество потоков? думаю что ты просто насоздавал кучу потоков которые висят и ждут:
Код: plaintext
- waiting to lock <d83c608> (a oracle.jdbc.driver.T4CConnection)
(это имплементация Connection для thin драйвера).
Скорее всего, ты раздаешь коннекшн между потоками. Это дурная практика.
То что в конце это нормально.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Thread creation failed: Insufficient user memory / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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