|
|
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
У меня следующая проблема: Программа многопоточно парсит большие файлы. У меня есть подозрение, что возможна ситуация, что программа упадёт из-за нехватки какого-нить пермгена или чего-то подбного. Ибо в реальной жизни файлы могут быть ещё больше. 1. Возможно ли это как-то предотвратить? (средства профилактики) 2. Совсем плохая ситуация, если программа свалилась, перед этим правда часть распарсила, пользователь видит результат(частичный), смотрит, что выполнение закончилось и думает, что всё уже успешно закончилось. Как такое предотвратить? catch(Throwable) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 12:36 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite901. Возможно ли это как-то предотвратить? Возможно: загружать информацию разумными порциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 12:40 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
wadman, как определить разумность порции в рантайме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 12:47 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite90wadman, как определить разумность порции в рантайме? Посмотреть размеры кучи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 12:48 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
1. Делать все через {Weak ,Soft, Phantom}Reference + ReferenceQueue 2. Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 13:56 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Если XML - открыть для себя, что кроме DOM, есть еще и SAX. Прочитать про устройство памяти в Java. Пока перлы "упадёт из-за нехватки какого-нить пермгена " думаю смотреть в сторону reference бессмысленно. Ну IMHO soft reference может чем то и хорош, но вот документация как он чиститься GC полный отстой. Если в проекте наплодите soft reference, боюсь падать оно не перестанет, а вот отладить место падение будет сложнее. Выделить больше памяти, что бы файл точно в память помещался. Большие файлы парсить в отдельной Java машине, что бы если и упадет, было не так жалко ))). А, вообще, зависит от специфика задачи, проекта и доступного оборудования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 14:24 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczredwhite90wadman, как определить разумность порции в рантайме? Посмотреть размеры кучи. А дадите ссылку просветиться как эту проблему обычно решают? непонятно с чем сравнить размер кучи, ведь sizeOf в java нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:06 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Atum11. Делать все через {Weak ,Soft, Phantom}Reference + ReferenceQueue оу, всегда знал о существовании этих слов, но никогда не видел как это пользуют ? покажете красочный пример? Atum12. Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд) я на 6 джаву завязан( А вообще стало интересно где тогда парситься это всё будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:10 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
а чем тебе "size of" поможет? сравнить с потреблением своей программы/алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:10 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite90...А вообще стало интересно где тогда парситься это всё будет? Что значит парситься? Банальный парсинг (например текстового файла), требует одного поля состояния парсера + 1-2 байта на текущей и пред. считанный символ. Зачем что-то большее? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:12 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Leonid KudryavtsevЕсли XML - открыть для себя, что кроме DOM, есть еще и SAX. не XML и давно открыл) Leonid KudryavtsevВыделить больше памяти, что бы файл точно в память помещался. Большие файлы парсить в отдельной Java машине, что бы если и упадет, было не так жалко ))). А, вообще, зависит от специфика задачи, проекта и доступного оборудования. приложение должно быть универсальным. Файлы могут взяться откуда угодно. А парситься они должны единообразно. И программа сама должна следить, чтобы онане взяла на себя слишком много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:13 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevа чем тебе "size of" поможет? сравнить с потреблением своей программы/алгоритма Ну смотрите, я так себе это представляю: Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл. Как каждое из этих трёх чисел получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:15 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite90...приложение должно быть универсальным. Файлы могут взяться откуда угодно. А парситься они должны единообразно. И программа сама должна следить, чтобы онане взяла на себя слишком много. Какие файлы и что значит "парситься" ? Если нужна изоляция по памяти, то на мой взгляд, только запускать 2-ую (5,10-ую JVM) и выполнять парсинг там. В любом другом случае, способа гарантированно изолировать кусок кода от ядра нет. Или я такого способа не знаю. Мало того, при работе в выделенной JVM, вполне возможно, может быть и значительное ускорение приложения. Т.к. ряд задач парсящих файлы, не будут гадить в общую кучу. Соответственно и куча может быть меньше (компактнее, больше в кеше процессора поместиться) и GC будет опять таки работать быстрее. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:17 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite90...Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл... "трачу" это present contininue , а посмотреть это или past или даже past perfect ))). Сорри за мой английский. Т.ч. в такой постановке вопроса - никак, в вопросе "падение падежей" ( C ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:20 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevredwhite90...А вообще стало интересно где тогда парситься это всё будет? Что значит парситься? Банальный парсинг (например текстового файла), требует одного поля состояния парсера + 1-2 байта на текущей и пред. считанный символ. Зачем что-то большее? ))) мне нужно анализировать содержимое файла. У меня есть некоторые паттерны, которые я там ищу... ммм....вообще да, логично. Но что имелось ввиду Atum1 Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд) я не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:20 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevredwhite90...Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл... "трачу" это present contininue , а посмотреть это или past или даже past perfect ))). Сорри за мой английский. Т.ч. в такой постановке вопроса - никак, в вопросе "падение падежей" ( C ) Можно взять какие-то волюнтаристские запасы. Ну допустим у нас 500 единиц ресурсов свободно, предполагаем, что 300 мы можем использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:24 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
http://stackoverflow.com/a/2015524/2674303 вот это те самые цифры, что мне нужны? Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:26 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
redwhite90вот это те самые цифры, что мне нужны? http://docs.oracle.com/javase/7/docs/api/java/lang/management/package-summary.html Через JMX, возможно, лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:32 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Зависит от задачи. Вашу задачу никто не знает. В "первом (втором, третьем и так далее) приближении" можно, но гарантий соответственно никаких. 1) Мы можем посмотреть, что сейчас 100 ресурсов свободно, а на деле, еще 100500 не почищенных GC свободного место. - сказали "облом", а на деле ресурсов полно. 2) Два потока: первый посмотреть, что 550 ресурсов свободно, запустился, второй посмотрел, 550 ресурсов свободно, запустился. Каждый потратил по 300 ресурсов и... - упали, а предположим, что еще и завалили ядро И так далее Или, работаем в предположении, что код написан _качественно_ и под JVM выделенно достаточно ресурсов. Или, что бы работать с гарантией, если файлы действительно большие и алгоритм _требует_ много памяти - запускать в отдельной JVM. Но, для качественных алгоритмов, связи "размер памяти" -> "потребленная ОП память" быть не должно. IMHO & AFAIK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:37 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Я бы для оценки: 1) брал бы размер еден спейс и умножал на кол-во сборок (минор) муссора - кол-во памяти засираемое алгоритмом в процессе работы + 2) то, что после миннор GC осталось в памяти - кол-во памяти потребляемое на структуры но мне кажется, что это не принесет счастья ТС и никак не решит задачу озаглавленную в Subj. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:41 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev...связи "размер памяти" -> "потребленная ОП память" быть не должно. IMHO & AFAIK. "размер файлы " -> "потребленная ОП память"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 15:55 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Хе, ща попробовал через трай-кетч вполне себе ловит OutOfMemoryError и не валится. Обрабатуйте исключение наздоровье, или я что-то не понял? Ну и чтоб не было случаев частично обработанного может положение курсора где нибудь хранить, типа если для файла не равно его размеру то значит файл недопрочтен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 16:04 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
И что делать, в этой обработке Out of memory ? Как она поможет. Можно ключик java поставить и out of memory вообще никогда не будет ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 16:36 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
Ну например уполовинить требуемый буфер. Или по невозможности обработать пометить файл как необрабатываемый и продолжить со следующим файлом. Подозреваю что я не совсем понял вопрос ибо если так просто б все было вопроса б не было :) сори если так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 16:41 |
|
||
|
Как обработать потенциальную нехватку памяти?
|
|||
|---|---|---|---|
|
#18+
esy301sНу например.... Усложним вопрос. Два потока (два куска кода): 1. WebLogic отвечает на HTTP запрос. 2. Пользовательская обработка. Тоже в нескольких потоках. Пользовательский процесс занял всю память. Когда работает поток WebLogic'а он пытается выделить буффер под HTTP запрос, запускается GC и падает с OutOfMemory. 1. Куда вставлять try ... catch..., если даже такую обработку вставили, как понять "кто виноват" и "что половинить" 2. Где гарантия, что для работы обработчика ошибок, осталось достаточно памяти ))) (можно попытаться настроить). 3. OutOfMemory не свидетельствует (как в C), что памяти нет. Оно лишь говорит, что GC подозревает, что памяти может не быть и дальше проводить garbage не разумно. Можно дать GC ключик и этой ошибки не будет. Будет по посинения мусор собирать и не выебы..ться. Т.ч. отсутствие ошибки, это не показатель, что все хорошо (настраивается). Я не спорю, что сделать можно. Но надо ли. Лично я бы, смотрел в сторону: 1. Нормальный алгоритм. Где требования к ресурсам не связаны (слабо связаны) с размером файла. 2. Если корреляция есть - ограничение на размер обрабатываемого файла 3. Если хочется полностью независимости по памяти - запускать дочернею JVM. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=38677086&tid=2127001]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 347ms |

| 0 / 0 |
