Слишком мало использования процессора в Java

StackOverflow https://stackoverflow.com/questions/433973

  •  10-07-2019
  •  | 
  •  

Вопрос

Привет, сообщество stackoverflow!

У меня возникла проблема: сложная алгоритмическая программа использует СЛИШКОМ МАЛЕНЬКУЮ загрузку процессора:где-то между 3 и 4%.Чтобы получить результаты, требуется очень много времени, и я считаю, что это просто недостаточно усердно.

Есть ли у кого-нибудь из вас, гениев, идеи, почему это могло произойти? Во всяком случае, я бы ожидал 100% использования.Еще одна деталь заключается в том, что программа делает вставки в базу данных sqlite3, и поэтому да, я полагаю, что через библиотеку sqlite3jdbc происходит много вызовов JNI.(Обратите внимание, что ранее я хотел отложить эти вставки с помощью пакета ReadedQuery, но это вызвало серьезные проблемы с памятью — данных много).

заранее спасибо

ОБНОВЛЯТЬ:Зафиксированный.Да, я просто придурок, но я не ожидал, что sqlite начнет новую транзакцию и создаст столько накладных расходов.

Теперь я использую ReadedStatement и ставлю в очередь 32768 записей перед вставкой - мне показалось, что это достаточно хорошее число.

Это было полезно?

Решение

Очевидно, что вызовы базы данных вызывают задержки.Разве это не возможность создавать небольшие партии и проверять, поможет ли это??Может быть, вы могли бы также распараллелить алгоритм, чтобы где-то была очередь, принимающая результаты, и другой поток, очищающий эту очередь?

редактировать:

Есть и другие проблемные места:

  • Оптимизация базы данных (модель)
  • Конфигурация сервера базы данных
  • Скорость диска

Все эти факторы следует учитывать

Другие советы

Я бы никогда не рекомендовал использовать драйвер JDBC с JNI, если доступна версия Java со 100% типом IV. Google нашел этот один.

Помимо этого, я не могу ничего сказать без дополнительной информации. Приложение и база данных работают на одном и том же оборудовании?

Что такое "интенсивный" о вставках?

Я бы рекомендовал профилировать и получать реальные данные, а не гадать. Основанные на вере вычисления никогда не работают для меня.

Если вы пишете много данных, похоже, вы привязаны к диску. Посмотрите на статистику дискового IO на компьютере, и если это действительно узкое место, либо найдите оборудование с лучшим IO, либо выясните, как выполнять меньше операций записи.

Диск замедляет работу вашего приложения. INSERTS используют диск, диск работает медленно, и ОС нужно дождаться завершения операций записи.

Разве вы не можете использовать 2 потока, один для алгоритма, а другой для вставок? Если вы делаете только вставки, вы также можете записать их в текстовый файл и выполнить их позже

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top