Я работал над проектом, который касается копирования данных из одной базы данных в другую.Написано в java6.И работает на распределенных машинах.У нас 9 серверных машин.Одним из них является основной узел, над которым работает мой основной модуль управления, который получает запросы на копирование и распределяет задание на другие 8 машин.
Он был начат для кодирования с JMS, чтобы распределять задачи на эту 8 машин раньше.На другом компьютере работал сервер Apache Active MQ.Но я понял, что это не очень уместно, и машины должны быть более тесно связаны, так как это вызывает некоторые накладные расходы кода, и необходимо было возвращать ответное сообщение для всех сообщений, отправляемых на подчиненные машины.Я решил изменить соединение между главным узлом и другими 8 подчиненными машинами и закодировал это с RMI.
Я закодировал сервер RMI для подчиненных машин и клиент для машины основного узла.Затем на главном узле были созданы потоки для запуска распределенных задач на подчиненных машинах.
Дело в том, что производительность резко снизилась.Обычно мне удавалось копировать около 6 ГБ данных за 6 минут из одного конкретного БД в другой.Теперь копирование 9 ГБ данных занимает более полутора часов.Раньше он занимал много ЦП, когда задача выполнялась на подчиненных машинах.Я наблюдал коэффициент использования процессора более 90%.Теперь он никогда не использует более 15%.
Мне нужно понять, что вызывает снижение производительности.Что я должен делать ?Должен ли я использовать инструмент устранения неполадок?
Редактировать ------------
Хорошо, я создал экземпляр подчиненного модуля только на моем ноутбуке и отправил на работу 16 задачна нем и на профилированном процессоре с использованием jvisualvm. Результаты приведены на рис. Результат CPU Profiler .
Методы управления в пакете (например, failTaskIfAbort (), executeSanityCheck () и т. д.) также былиприсутствует, когда я использовал JMS для машинного общения.Это заставляет меня думать, RMI потоки имеют низкий приоритет или что-то в этом роде
Я также загрузил файл nps, экспортированный из jvisualvm.Вы можете получить его здесь: результат экспортированного профиля