2012-06-07 4 views
2

У нас есть стороннее приложение java на смехотворно мощном Linux-боксе, в котором выполняется алгоритм планирования. Приложение работает слишком медленно для требуемой нагрузки. У нас нет кода, и продавец не будет вносить какие-либо изменения в приложение из-за денежных причин, поэтому я не могу улучшить код. Приложение однопоточное, и его дизайн не поддается параллелизации (поэтому я не могу разделить нагрузку между двумя ящиками).Как улучшить производительность кода, который у вас нет?

Что я могу сделать, будь то программное обеспечение или аппаратное обеспечение, чтобы улучшить производительность приложения?

+0

Что такое приложение? Возможно чтение/запись некоторых файлов на диске? – piokuc

+0

Попробуйте угрожать или подкупить его ... * «Если вы не бежите быстрее, я уничтожу вас с жесткого диска!«*/*», если вы бежите быстрее, вы можете получить некоторое свободное время процессора, и я познакомлю вас с красивой женской программой »* :-) –

+0

@piokuc Приложение читает из огромного файла, запускает алгоритм на несколько часов, затем записывает результаты обратно в файл. Время, затрачиваемое на чтение/запись на диск, незначительно. – AngryHacker

ответ

6
  • Получить на новейшую версию Java (новые версии, как правило, повышение производительности)

  • Give Java more memory to work with (тест, чтобы увидеть, если это делает никакой разницы)

  • Меру, что он делает с top , Обновляйте все, с чем у вас проблемы (больше памяти, более быстрый процессор, SSD). Некоторые процессоры лучше работают при однопоточных рабочих нагрузках, чем другие (читайте: не запускайте это на Bulldozer, возможно, что-то с Turbo Boost).

  • Играть с другими experimental JVM options (бенчмарка, чтобы увидеть, если это делает никакой разницы)

  • Удалите любые другие приложения, работающие на этой машине (бенчмарка, чтобы проверить, есть ли какие-либо выгоды - нет смысла тратить деньги, если это Безразлично» т помощь)

  • Оплатить поставщика, чтобы сделать это быстрее или дать вам код (т.е. дать им денежные причины, чтобы исправить это)

  • Найти альтернативный

  • Написать свой альтернативный

+1

Стоит отметить, что большая часть «экспериментальных параметров JVM» настраивает сборщик мусора. Я нашел на основе прошлого опыта, что GC и Memory - две самые большие вещи, которые вы можете настроить для достижения более высокой производительности. – Matt

+0

Если этот алгоритм использует много памяти (это не ясно, если это так), это может определенно выиграть от большей кучи и, возможно, многопоточного сборщика мусора. Это действительно зависит от того, что он делает, хотя. Я могу представить полезные алгоритмы, которые в значительной степени полностью связаны с ЦП. –

+0

@BrendanLong Требуется огромное количество памяти. Он достигает 100 ГБ. Куча уже настроена, поэтому я не могу сделать больше. – AngryHacker

1

1) Вы можете улучшить аппаратное обеспечение, на котором работает приложение. Сделайте это, посмотрев, какие ресурсы использует приложение. Является ли это максимизацией процессора или использованием всей памяти (или обоих)? Если это так, вы можете добавить больше мощности процессора или RAM соответственно.

2) Есть ли способ кэшировать результаты из приложения? Можете ли вы когда-нибудь избежать его использования?

В противном случае, вы действительно можете сделать гораздо больше. Если проблема становится более серьезной, вам, возможно, придется написать собственный алгоритм планирования или, еще лучше, найти лучшего поставщика.

1

Вы можете препроцессировать ввод так что приложение имеет меньше работы?

Например, возможно, первое, что делает приложение, это сортировать список заданий, которые планируется запланировать, используя сортировку слияния. Если вы предварительно отсортируете список, то сортировка приложения не будет работать. Возможно, вам удастся отсортировать список быстрее, чем приложение может использовать многие ядра, сделать это заранее и т. Д.

+0

К сожалению, нет. На данный момент все варианты программного обеспечения были исчерпаны. – AngryHacker

1

Запустите его на более быстром компьютере. Это, вероятно, самое дешевое решение партии.

Смежные вопросы