![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Привет всем!
Только я не давно разобрался с отправкой больших данных в БД, так вот теперь совершенно обратная проблема! Падает выполнение запроса:
Вылетает все тот же присловутый:
Я предполагал, что при выполнении данного запроса не будет копирования больших данных из БД в память программы, это касается поля data (в запросе идет под *) имеющего тип BLOB. Но видимо копирование данных всеже происходит, и память у JVM истощается... что делать, ума не приложу.... драйвер к MySQL (mysql-connector-java-3.1.12-bin.jar) используется один и тот же... Может с драйвером проблема??? Это сообщение отредактировал(а) MoonCat - 7.5.2006, 14:53 |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Вполне возможно. Ты не пробовал в своем решении с insert загружать файлы размером в 2-3 раза больше? Мне кажется в первоначальном варианте файл не только целиком загружается в память, но еще и дублируется. Поэтому все могло сработать когда дублирование устранилось, но проблемы-то это не снимает. Вот посмотри что здесь написано - http://dev.mysql.com/doc/connector/j/en/blob.html:
Видимо еще разбираться и разбираться. |
|||
|
||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
пробовал, 100 мб - без проблем, 250 мб - с тормозами, но загрузил. и еще locatorsUpdateCopy() объекта DatabaseMetaData возвращает true, т.е.
я так понял, что при работе с полями типа BLOB и CLOB, изменения вносятся сначало в копию, а только потом уже в оригинал на сервере, хотя относится ли это к запросам типа SELECT не известно.... и можно ли это отключить... (?) И еще хочется попробовать какой-нибуть другой драйвер для MySQL (может что посоветуете?), полезу в google... Это сообщение отредактировал(а) MoonCat - 7.5.2006, 18:55 |
||||
|
|||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
.... Попытался решить проблему, увеличением максимально возможного Java heap space.
Запускал клиента с ключом -Xmx1024m для JVM ( java -server -Xmx1024m clientprogram.jar). В принципе, все стало нормально работать, теперь большие файлы загружаются и скачиваются из БД. Но все равно есть вопросы, по поводу зачем столько памяти необходимо... P.S. : Интересным фактом остается то, что на моей машине всего 512 мб памяти, а резервировал я 1024 (-Xmx1024m) и JVM это съела. Видимо достаточно сказать виртуальной машине : "Ты можешь!", хотя факт этого не обеспечен, и она действительно сможет... |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Мне кажется дело не в памати.Дело в том что если копировать фаил не 4ерез массив байтов в цикле ,а сразу закачать в памать одним массибов фаил так в 300 мегов ,то компик упадёт(что у тебя и проишодит).Тоесть нужно както получить InputStream ot bazi и постепенно в цикле гдето по 8kb выкачивать.Но как....?
|
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Спешу заметить, что MoonCat именно это и делает. Исходный пост здесь - http://forum.vingrad.ru/index.php?showtopic=94885. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
А кто сказал, что вся куча должна быть в оперативной памяти? К тому же это максимум (который не обязательно будет достигнут), вот попробуй задасть -Xms1024m увидишь, что будет. И кстати, попробуй сделать курсор однонаправленным (хотя по идее он именно таким и должен быть). -------------------- 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. |
|||
|
||||
| powerOn |
|
||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Интересно, интересно на моей машине как я уже говорил, 512 мб оперативной памяти. Запускаю программу с ключами: -server -Xmx1024m -Xms1024m программа запустилась, вывоже унформацию о памяти на экран:
получаю в результате:
Вся память ушла в файл подкачки, это видно в диспетчере задач... Присоединённый файл ( Кол-во скачиваний: 8 )
task_manager.JPG 49,33 Kb |
||||||
|
|||||||
![]()
|
| Правила форума "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. |