|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
||||||
Если кто работал с Oracle/JDBC под Linux, помогите советом !!!!22.09.2008, 21:50. Показов 3509. Ответов 22
Метки нет (Все метки)
Добрый день !!!
В процессе нагрузочного тестирования столкнулись с неожиданной проблемой - утечкой памяти из-под работающей JVM интенсивно читающей из СУБД, постепенно убирая все свое дошли до элементарного примера (писать в ответе что так веб-приложения не пишут не надо, мы и так это знаем, это просто ПРИМЕР !!!!!):
малым временем сессии - порядка минуты, благодаря этому количество сессий в Резине через некоторое время стабилизируется, а пямять продолжает утекать, затем начинает расти swap, производительность падает, затем все умирает. Причем изнутри JVM объем доступной и максимальной памяти не меняется, меняется только объем самой JVM в системе. Тестировали под JVM IBM 1.3.0 и Sun 1.4.0, ОС Linux RedHat 7.3 и на машине с Resin 2.1.0 и на машине с Oracle 9.2, драйвера поставили последние, рекомендованные под JDK 1.4. Такая же картина наблюдается с предыдущими версиями JDK и Oracle 8.1.6, правда утечка менее интенсивна, но и скорость чтения из БД снижается. Данная проблема лечится только переходом под w2k, там все нормально и с памятью и с производительностью. Вопрос - не встречались ли вы с чем-нибудь подобным и не посоветуете ли что-нибудь, кроме смены ОС ??? Может у нас крыша поехала, на всякий случай прилагаю код тестовой JSP.
0
|
||||||
| 22.09.2008, 21:50 | |
|
Ответы с готовыми решениями:
22
Ошибка в jdbc+oracle: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver Кто-нибудь работал с Oracle JDeveloper??? Кто работал с Word'ом из Бейсика помогите? |
|
mishgun
|
|
| 23.09.2008, 00:40 | |
|
А может вам эту строку
int fcnt = rs.getMetaData().getColumnCount(); все-таки вынести за пределы while?Судя по описанию проблемы это вполне может быть while (он это умеет ЛОЛ).Тем более что нет никакого смысла каждый раз создавать в лупе переменную содержащую количество колонок.... |
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 23.09.2008, 09:58 [ТС] | |
|
Согласен, это не функционально, только вынесение дела к сожалению не меняет .... вообще скорость утечки зависит от объема выкачиваемых данных и от скорости работы с СУБД (в общем-то тоже от объема ....). Пробовали JServ/Tomcat, все то же самое. Сервер 9.2 под Линукс тоже ведет себя странно - после создания индекса или сбора статистики производительность падает просто катастрофически, лечится только перезагрузкой сервера СУБД.
0
|
|
|
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
|
|
| 23.09.2008, 12:01 | |
|
Может быть это связано с тем, что коннект к Oracle создается свой для каждого клиента и существование 300 объектов коннекшн является непосильным грузом; возможно следует попробывать явно создать пулл объектов и брать коннекты непосредственно из пула?
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 23.09.2008, 12:08 [ТС] | |
|
Вряд ли ... во-первых в той системе, в которой мы впервые столкнулись с данной проблемой был пул соединений и это ничего не лечило. Во-вторых у нас на сервере СУБД установлен лимит 150 соединений, в третьих даже 300 соединений (а реально даже без пула их меньше) не должно приводить к утечке, к медленной работе да, согласен, но утечка это уже явная ошибка .... В четвертых запуск 50 виртуальных клиентов ничего не лечил, только утечка шла медленнее ...
0
|
|
|
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
|
|
| 23.09.2008, 12:59 | |
|
Как известно, в java мы имеем власть только над созданием объектов, когда они будут удалены - мы не знаем и гарантировать то , что они больше не существуют - не можем. Имеется в виду, что дать гарантию, что после вызова метода con.close() экземпляр класса Connection освободил занимаемые ресурсы нельзя. В тоже время можно с уверенностью сказать, что при вызове метода DriverManager.getConnection() некие ресурсы были выделены. Т.е. даже если имеется 50 клиентов, то каждый вызов каждого клиента занимает ресурсы.
То же самое можно сказать, про механизм создания пула, зашитый в неком продукте. Если использовался пул, механизм работы которого не прозрачен, то он мог натворить вской несуразицы. Нужно точно знать как работает пул. Имелось в виду следующее, что если не понятно куда утекают ресурсы нужно иметь жесткий контроль над ними, для этого механизмы создания и хранения объектов должны быть прозрачны. У нас народ пользуется библиотеками, находящимися здесь: http://jakarta.apache.org/commons/pool/index.html, они с открытым кодом и бесплатны. Гляньте, может поможет...
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 23.09.2008, 13:10 [ТС] | |
|
Как работает пул знаем - сами писали. Утечка памяти идет судя по всему не в жабе, так как объемы доступной и свободной памяти видимые изнутри JVM не меняются, растет сама жаба, как приложение в системе. Это раз, во-вторых такой проблемы нет под виндами, а если это была бы лшибка на уровне жабы, то она бы была. Скорее всего проблема в нативных функциях клиента Оракла, вызываемых через JDBC переходник.
Опять-таки, использование или отказ от пула не должны влиять на утечку памяти, только на производительность. С точки зрения стандарта JDBC/Oracle код абсолютно нормален, что свидетельствует о проблемах самого Оракла. У вас народ пользуется какой СУБД и под какой ОС ???? КАкая примерно интенсивность работы с СУБД ???
0
|
|
|
0 / 0 / 0
Регистрация: 07.09.2008
Сообщений: 13
|
|
| 23.09.2008, 13:44 | |
|
У нас та же проблема была и под w2k. Причем с MYSQL. Коннект создавался всего один раз в init а потом только statement'ы создавались Причем сама jvm не росла выше положенного но использованная память в системе утекала. Решилось все только созданием каждый раз нового коннекта на запрос. (как в вашем примере). Кстати в jdbc2.0 пул должен вроде автоматически создаваться и рукотворном нужды нет
0
|
|
|
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
|
|
| 23.09.2008, 14:07 | |
|
У нас в принцепе немного другая схема работы (WEB - клиент работает с БД через EJB, при этом, помимо выбора объектов из пула, данные запросов кэшируются на сервере).
А вообще БД - оракл, стоит на солярисе и на нт2000. И там и там нормально. to bodrelka: в jdbc2.0 включены классы и интерфейсы для поддержки пула, но то как он работает зашито в драйвере, его поддерживающем и (или) сервере.
0
|
|
|
0 / 0 / 0
Регистрация: 07.09.2008
Сообщений: 13
|
|
| 23.09.2008, 14:40 | |
|
2vold
То есть всетаки свой пул ставить имеет смысл?
0
|
|
|
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
|
|
| 23.09.2008, 15:42 | |
|
2 bodrelka:
Безусловно все зависит от задачи. Если все хоршо, без збоев, особо не загружая ресурсы работает, каждый клиент может вполне открывать новое соединение, закрывать его... Но при росте системы, при увеличении числа клиентов, при количественном и качественном росте транзакций такие вещи уже не прокатывают, на создание объектов тратиться слишком много ресурсов, а механизмы поддержки пула, релизованные сторонними коммерческими разработчиками не всегда устраивают. Тогда либо нужно писать свои библиотеки, либо искать то, что соответствует требованиям. Примернр так.
0
|
|
|
mishgun
|
|
| 23.09.2008, 20:24 | |
|
А что если код соединения перенесчти в JavaBean и дать ему scope=page? Тогда по идее после вызова Бина и распечатки данных из Базы этот бин умрет?
|
|
|
0 / 0 / 1
Регистрация: 23.01.2008
Сообщений: 251
|
|
| 23.09.2008, 22:18 | |
|
А что если пересесть на DotNet???
0
|
|
|
mishgun
|
|
| 23.09.2008, 22:58 | |
|
to kreеk
а если внимательно прочитать чего автор пишет?Или что уже есть .net под Линукс? |
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 23.09.2008, 23:01 [ТС] | |
|
>А что если код соединения перенесчти в JavaBean и дать ему >scope=page? Тогда по идее после вызова Бина и распечатки данных из >Базы этот бин умрет?
и что ????????????? ссылка на соединение и так имеет область определения одни метод результирующего сервлета и тоже умирает после генерации страницы ... никакой разницы >А что если пересесть на DotNet??? Смысл ??? проще уже имеющееся приложение эксплуатировать на w2k, там для этого все есть ... правда w2k как платформа для интернет-приложений внушает нам серьезные опасения......
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 23.09.2008, 23:01 [ТС] | |
|
>А что если код соединения перенесчти в JavaBean и дать ему >scope=page? Тогда по идее после вызова Бина и распечатки данных из >Базы этот бин умрет?
и что ????????????? ссылка на соединение и так имеет область определения одни метод результирующего сервлета и тоже умирает после генерации страницы ... никакой разницы >А что если пересесть на DotNet??? Смысл ??? проще уже имеющееся приложение эксплуатировать на w2k, там для этого все есть ... правда w2k как платформа для интернет-приложений внушает нам серьезные опасения......
0
|
|
|
0 / 0 / 0
Регистрация: 07.09.2008
Сообщений: 13
|
|
| 24.09.2008, 09:00 | |
|
По моему опыту проблема в jdbc драйвере. Попробуйте другой драйвер или дб(как тест). System.gc(); не помогает - знаю твердо, это не повисшие Java обьекты это гдето вообще вне java.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 9
|
|
| 24.09.2008, 10:07 [ТС] | |
|
Абсолютно с bodrelka согласен, на мой взгляд утечка памяти происходит в нативном коде, то есть где-то в самом клиенте Oracle, в каких то его бинарных модулях, которые используются OCI-драйверам jdbc. Данный код исполняется в рамках того же потока, что и JVM но не внутри нее. Поэтому утечка памяти видна на системном уровне и не видна внутри JVM. Пробовали разные версии драйверов результаты плачевные. В результате пришлось перейти на w2k. Resin + IBM JVM 1.3 отлично там работают, держат нагрузку и не дают никаких проблем. Видимо в Oracle считают, что никто всерьез использовать их технологии под ЛИнукс не будут, очень симптоматично ... кстати, сервер под Линукс тоже ведет себя очень странно
0
|
|
|
0 / 0 / 0
Регистрация: 07.09.2008
Сообщений: 13
|
|
| 24.09.2008, 10:33 | |
|
я то надеялся, что проблема решаема - у меня была та же дрянь с MySQL. Что за хрень - надо баг репорт писать!. Вот еще - а какая версия Oracle мб неполная(триальная) или плохо украденная - тогда может быть все что угодно...
0
|
|
|
mishgun
|
|
| 25.09.2008, 02:55 | |
|
Народ грит что Oracle сукем=ифицирован под SuSe Linux а не под RedHat
|
|
| 25.09.2008, 02:55 | |
|
Помогаю со студенческими работами здесь
20
Если кто-то работал с видео в С++, подскажите. Уважаемые форумчане. Помогите с советом. С советом о жизни. Как узнать, кто работал в заданное время и под какой учеткой Кто-ть работал с 1С под MySQL или Sybase SQL Anuwhere Server? Кто работал с BDE, помогите настроить доступ к Paradox через ODBC... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|