![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Key |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
В базе веб-приложения хранятся логи. Надо сделать чтоб при запросе юзера ему отдавало в поток для закачки сформированый файл с текстом логов. Но проблема в том что их очень много, сотни тысяч! Загрузить их в коллекцию не получается, вылетает аут оф мемори еррор. Пробовал по частях записывать в файл (по пару тысяч), но не помогает, то же самое. Максимум 20 тыс. получается. Подскажите как можно такое сделать.
|
|||
|
||||
| man_without_face |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 1.4.2008 Репутация: нет Всего: 1 |
партиями складировать в архивы можно например.
|
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Обрабатывайте на лету, и сразу выдавайте в выходной поток пользователю. Вроде очевидно?
|
|||
|
||||
| Key |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
Да, но суть в том что надо сперва загрузить кусок данных с базы - записать в файл или поток, загрузить следующий - записать в файл или поток. Условно :
И так далее. Ну это в цыкле должно быть и т.п. Проблема в том что память не очищается, хотя сылка logs уже указывает на другой аддрес. Через некоторое время память забивается и вылетает ексепшн. Помогает установка большего размера памяти для сервера (Томкета), но это плохое решение. |
||||
|
|||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
1. Почему 10000, а не 1000, 100, 10 ....?
2. Как узнали? Строчка лога из 5 символов существенно отличается от строки из 500 символов, так? А что если в 5-ой или 10-ой партии которую вы читаете с сервера таких строк большинство? Не это ли является причиной истощения памяти? Ну а если вы видите что память действительно не очищается, то ищите причину и устраняйте. Покажите код метода getDataFromDatabase() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
1. А почему нельзя создать ResultSet с флагом ResultSet.TYPE_SCROLL_INSENSITIVE, скроллить результат и построчно записывать в файл? Память при этом будет использоваться по минимуму. СУБД не позволяет?
2. Если первое не проходит, то, например, MySQL умеет так: "SELECT * FROM tbl LIMIT 5,10", выбирая таким образом строки 6-15. Первый номер будет работать существенно быстрее. |
|||
|
||||
| Key |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
Об этом я както не подумал, посмотрю. Просто у меня логи обьекты и не задумался что туда записывается. Возможно гдето они занимают больше памяти.
Просто у меня используется Hibernate/JPA. В методе выборки записано:
Вроде этого. Думал может JPA выдирает всю базу и выдает только кусок, но судя по логах гибернейта используется команда MySQL LIMIT. Буду копать дальше, понял что скорее всего чтото упустил. |
||||||
|
|||||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Цитата из Hibernate FAQ:
Это сообщение отредактировал(а) ivg - 6.7.2008, 09:24 |
|||
|
||||
| Key |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
спасибо |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |