|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
Начинает медленно работать Java программа30.09.2013, 14:12. Показов 4805. Ответов 38
Метки нет (Все метки)
Вот смотрите пишу программу по SMPP. Главный поток выдерает из базы 150смс и начинает их рассылать путем создания ExecutorService. Потом главный поток завершения всех подпотоков, путем вызова get(). Подпотоки отправляют и делают запись в базу.
Так вот. Сначало все нормально СМС идут как положено по 100-150 в секунду, НО вот через некоторое время программа перестает их отправлять с такой скоростью и шлет по 1-2смс/с Уважаемые форумчане подскажите из за чего такое может случаться ? Массив в который результаты подпотоков складываю, очищаю в конце ожидания завершения подпотоков Подпотоки Runnable
0
|
|
| 30.09.2013, 14:12 | |
|
Ответы с готовыми решениями:
38
Компьютер начинает медленно работать в игре. Программа начинает неправильно работать после открытия её в Delphi XE8 Win2000 Advanced Server: при загрузке начинает вешаться, медленно работает |
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|||||||||||
| 30.09.2013, 17:09 [ТС] | |||||||||||
|
Вот поток который непосредственно рассылает
Ну соответсвенно создается пул таких поток, CachedThreadPool Добавлено через 4 минуты Вот главный поток, работает таким образом... Кликните здесь для просмотра всего текста
Добавлено через 11 минут Что там искать можно , все же чистится после первой итерации, да и синхронизированных методов нет вроде... Добавлено через 38 минут Нету никаких идей ? Вроде бы не очень сложный код для восприятия
0
|
|||||||||||
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
||
| 30.09.2013, 18:31 | ||
|
PS наверно из за этого и лагает так как на создавали over9999 потоков , а потом двух ядерному процу переключаться между ними...
1
|
||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 30.09.2013, 18:53 [ТС] | |
|
1) А зачем должно создаваться over99999 потоков, ChachedThreadPool разве потом не берет потоки которые были уже использованы ? В описании вроде так...
2)У меня создание ExecutorService статическое... Но смотрите какой момент. Программа сама делит текст смс тоесть ясли я выбираю 100смс из базы, программа делит их на части, получается допустим 2 части, то 100*2 это 200. Тоесть каждый раз нужно будет пересоздавать динамически Executor и прописывать FixedThreadPool 3) Я уже пробовал допустим создавать динамически Executor но если много раз создавать объект то, Memory Analyzer мне выдавал какую то гадость, ошибку по памяти, лика не было, но программа весила 800мб, теперь я сделал его статическим и программа стала занимать 100мб. Что посоветуете ?
0
|
|
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
||
| 30.09.2013, 19:14 | ||
|
1
|
||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
||
| 30.09.2013, 19:21 [ТС] | ||
|
Добавлено через 5 минут Может еще какие то советы дадите, гуру Java будте любезны помогите пожалуйста...
0
|
||
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
||
| 30.09.2013, 20:02 | ||
|
0
|
||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 30.09.2013, 20:56 [ТС] | |
|
Ну ExecutorService exec = new FixedThreadPool(N); У меня N каждый раз разное, и если смс будет больше чем N то прога то будет тормозить...
0
|
|
|
|
||
| 30.09.2013, 21:08 | ||
|
У вас много потоков обращаются сразу к одним и тем же Statement-ам и вызывает их? Вы уверены что это нормально? (Я уверен, что это ужасная идея и, возможно, проблема в этом)
PS. Зачем у вас создается анонимный подкласс SenderThread? Уберите фигурные скобки
И еще: всегда закрывайте объекты СУБД (Connection, ResultSet, Statement) в блоке finally.
1
|
||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
||
| 30.09.2013, 22:00 [ТС] | ||
|
Как бы вы предложили решить эту проблему ? 2) Не заметил скобки, уберу 3) Я их закрываю rs.close(); stmt3.close(); Не закрываю только preparedStatement-ы. А коннект зачем закрывать ? Каждый раз потом опять коннектится ?
0
|
||
|
|
||||||
| 30.09.2013, 22:09 | ||||||
|
1. Варианта два - использовать синхронизацию, либо создавать свой connection/Statement на каждый поток.
Я бы взял какую-нибудь реализацию пула соединения с БД (c3p0, tomcat DBCP, Oracle UCP, ...) и использовал его для создания Connection-ов и использовал в каждом потоке свой Connection. Добавлено через 3 минуты 3. Что если list.clear() бросит Exception? rs.close() тогда не вызовется. Что если Exception бросится на строке 10?
1
|
||||||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
||
| 30.09.2013, 22:54 [ТС] | ||
|
3. Я это знаю просто руки не доходят ) Основной вопрос не в этом.. А в медленной работе программы, через 1 2 итерации потока... Завтра на работе, ваши замечания исправлю, постараюсь сделать как говорили... И напишу результат. Добавлено через 3 минуты Если вас не затруднит можете рассказать поподробнее чем 1 connection так плох ?
0
|
||
|
|
|||
| 01.10.2013, 07:15 | |||
|
0
|
|||
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 01.10.2013, 12:32 [ТС] | |
|
Вообщем я тут прикинул. Проблема такова что мне нужно каждый раз рассылать смс асинхронно, но количество потоков в пуле каждый раз может быть разным... Тоесть рассылая допустим 10-смс по 1-ой части то будет 10 потоков, рассылая 10-смс по 2-е части то будет 20 потоков.
Хмм нужно что бы при каждой итерации создавался новый пул потоков с определенным количеством потоков... Как такое реализовать подскажите пожалуйста. Пример: Создаем пул на 100 потоков, он отработал, еще создаем пул потоков допустим на 50 потоков, но при этом первый пул то уже не нужен и его надо удалить как то...
0
|
|
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 01.10.2013, 14:11 [ТС] | |
|
Вот залогировать решил программу, логи большие но самое интересное в конце начинается... Господа гуру, может быть кто то сталкивался с такой проблемой, все числа в милисекундах, это время выполнения операций. Шлю по 20смс. Пул Cached.
loging.txt Во во вложении. лог. В конце программа начинает себя очень странно вести и я не могу понять почему так...
0
|
|
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 01.10.2013, 16:13 [ТС] | |
|
Ну что есть какие либо идеи ?
0
|
|
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
| 01.10.2013, 18:43 [ТС] | |
|
Думаете без пула, просто попробовать обычных потоков запускать ?
Добавлено через 37 минут А вы посмотрели логи, что скажете ? Программа то работает просто начинает тормозить и не понятно почему ((
0
|
|
|
|
||
| 01.10.2013, 19:46 | ||
|
Его создали чтобы уменьшить накладные расходы на создание потока, у вас такой проблемы нет
0
|
||
| 01.10.2013, 19:46 | |
|
Помогаю со студенческими работами здесь
20
После переустановки Windows - страница при просмотре спускается очень медленно и начинает плавать после установки любого драйвера для видеокарты, монитор начинает мигать, изображения загружаются медленно Какой браузер лучше установить вместо Opera? (после получаса работы начинает медленно открывать вкладки)
Поток не начинает работать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|