Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите настроить GarbageCollector 
:(
    Опции темы
KostenkoSergey
Дата 4.11.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



Суть проблемы :
На продакшен-сервере переодицки вылазит OutOfMemory.
Как известно GarbageCollector запускается когда свободной памяти остаётся мало.
Но при таких раскладах у меня сервер ,как я понимаю, съедает остаток памяти быстрее чем успевает отработать сборщик. (например построил DOM-модель метров на 100)

Я где то слышал, что можно настроить сборщик таким образом, что бы он постоянно работал на фоне, а не запускался, когда памяти не хватает... (о нагрузке на проц пока не говорим, т.к. в наши дни он редко загружен на все 100 smile)

Ну или крайне полезной оказалась бы опция позволяющая запускать GarbageCollector ,скажем, каждые 30 минут ...

Кто что думает по этому поводу ?
Заранее благодарен. smile
PM ICQ   Вверх
batigoal
Дата 4.11.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Вот этот документ смотрел? Может, там что-нибудь есть.
http://java.sun.com/docs/hotspot/gc1.4.2/index.html
Ну и можно, конечно, просто стартовать System.gc() по таймеру, но гарантий - никаких...

Это сообщение отредактировал(а) Lamer George - 4.11.2005, 10:35


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
KostenkoSergey
Дата 4.11.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



Цитата(Lamer @ 4.11.2005, 10:33)
Вот этот документ смотрел? Может, там что-нибудь есть.
http://java.sun.com/docs/hotspot/gc1.4.2/index.html
Ну и можно, конечно, просто стартовать System.gc() по таймеру, но гарантий - никаких...

смотрел конечно, но ответов не нашёл, к сожалению .... может мой английский меня подвёл, а мож и нема smile

System.gc() - такая мыслишка меня посещала, но как то уж притянуто за ухи, мне кажется ....
Да и сервер энто... чё там такого работать с таймером могёт? MDB чтоль...

smile

Это сообщение отредактировал(а) KostenkoSergey - 4.11.2005, 10:48
PM ICQ   Вверх
LSD
Дата 4.11.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(JavaDoc)
public class OutOfMemoryError

extends VirtualMachineError

Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.

Так что переодический запуск тебе не поможет, GarbageCollector всегда запускается перед тем как выкинуть OutOfMemoryError.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KostenkoSergey
Дата 4.11.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



Цитата(LSD @ 4.11.2005, 12:32)
Так что переодический запуск тебе не поможет, GarbageCollector всегда запускается перед тем как выкинуть OutOfMemoryError.

я писал, что
Но при таких раскладах у меня сервер ,как я понимаю, съедает остаток памяти быстрее чем успевает отработать сборщик. (например построил DOM-модель метров на 100)

запустить принутиельно можно - gc() .... только вот как это сделать пораньше....
есть ли опции smile VM

Может конечно мне и не поможет smile но
smile

Это сообщение отредактировал(а) KostenkoSergey - 4.11.2005, 13:54
PM ICQ   Вверх
tux
Дата 4.11.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(KostenkoSergey @ 4.11.2005, 18:45)
есть ли опции smile VM

Опции-то есть, только в двух словах их не опишешь.
В первую очередь посоветовал бы при запуске сервера задать опцию -verbose:gc или -Xloggc:file. Делают они одно и то же - выдают лог работы сборщика мусора, только вторая выдает лог в указанный файл. По крайней мере можно определить когда он запускался и была ли попытка освободить память прежде чем вылетело исключение.

Далее, возможно поможет установка ключа -Xincgc, который включает более предсказуемый инкрементный сборщик мусора. Правда при этом несколько падает производительность. Если ничего не поможет, можно поиграть с ключами HotSpot, которые описаны здесь. Однако, этот процесс уже вряд ли можно четко описать.

Вспомнил вот еще один метод. Периодически по мере построения того же DOM можно выполнять что-нибудь похожее на такой код:
Код

public static void fullGC() {
    Runtime rt = Runtime.getRuntime();
    long isFree = rt.freeMemory();
    long wasFree;
 
    do {
        wasFree = isFree;
        rt.runFinalization();
        rt.gc();
        isFree = rt.freeMemory();
    while (isFree > wasFree);
}

Он в конце концов гарантирует, что сборщик мусора принялся таки за дело. Согласен, выглядит несколько безумно smile Но придумал это не я, метод описан в книге Арнольда и Гослинга. Если уж Гослинг рекомендует... smile

Это сообщение отредактировал(а) tux - 4.11.2005, 17:25
PM MAIL Skype GTalk Jabber YIM   Вверх
COVD
Дата 4.11.2005, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата
На продакшен-сервере переодицки вылазит OutOfMemory.


Обычно это результат ошибки программирования и gc бессилен тут помочь.

Это сообщение отредактировал(а) COVD - 4.11.2005, 17:13
PM MAIL   Вверх
KostenkoSergey
Дата 4.11.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



интересный примерчк smile спасибо.
Беда только, что он время отклика на запрос увеличивает на порядок...

2COVD : offtopic (возможно, хотя я бы не был таким категоричным в подобного рода заявлениях)

Это сообщение отредактировал(а) KostenkoSergey - 4.11.2005, 17:29
PM ICQ   Вверх
LSD
Дата 5.11.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(KostenkoSergey @ 4.11.2005, 13:45)
Но при таких раскладах у меня сервер ,как я понимаю, съедает остаток памяти быстрее чем успевает отработать сборщик. (например построил DOM-модель метров на 100)

Я считал, что на время запуска GC все треды останавливаются, разве нет?
В любом случае смоделировать подобную ситуацию мне не удалось (создал 4 потока которые активно "мусорят", но OutOfMemory так и не получил).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chief39
Дата 6.11.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(LSD @ 5.11.2005, 15:59)
Я считал, что на время запуска GC все треды останавливаются, разве нет?

Если не ошибаюсь, большинство jvm запускает сборщик в двух режимах.
Не скажу точно как называются, но суть такова, что один режим - это подчистка без особых замедлений(вроде как удаление файла), а второй запускается когда уже первый режим не помогает - он останавливает треды, подчищает всё и стягивает до кучи(а-ля дефрагментация диска). Кажется у Эккеля есть абзацик по сему поводу.
Кажется на сановской машине именно так и реализовано было(для 1.2 -1.3). Ещё приводилось сравнение джавовской кучи с конвейером, чем она выгодно отличалась от куч хотя бы того же C++.


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.