2016-07-25 3 views
7

Есть ли простой, дешевый (который не требует тестирования программы на многих аппаратных настройках) и безболезненный метод определения требований к оборудованию (например, процессора, оперативной памяти и т. Д.), Которые требуют запуска моего собственной программы? Как это должно быть сделано?Как определить требования программы

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

+0

Это один JVM, который выполняет несколько задач или несколько разных JVM? Они работают без остановок, или они запускаются ОС (например, cron) и перестают работать, когда закончены? – Thierry

+0

В этом конкретном случае у меня есть программа с серверной задачей на одном JVM, и она должна работать постоянно, но на самом деле я ищу какое-то общее решение, даже не только для Java-программ. – Marcon

ответ

4

Нет, я не думаю, что существует какой-либо общепринятый способ определения минимальных требований, не связанных с тестированием на каком-либо определенном контрольном оборудовании.

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

Трудно также определить критерии «приемлемого исполнения» в целом, не зная о случаях использования.

Многие программы будут использовать больше ресурсов, если они доступны, но также могут ладить с меньшими затратами.

Например, рассмотрите программу, использующую пул потоков с размером a в зависимости от количества ядер процессора. При работе на процессоре с большим количеством ядер больше работы можно выполнять параллельно, но в то же время накладные расходы из-за создания потоков, синхронизации и агрегации результатов увеличивается. Эффекты нелинейны по числу процессоров и сильно зависят от реальной программы и данных. Точно так же эффекты уменьшения доступного диапазона памяти от потенциального выброса OutOfMemory-Errors для некоторых входов (но, возможно, не для других) к простому запуску GC несколько чаще (и эффекты , что зависят от стратегии GC, от заметного зависает лишь немного больше загрузки процессора).

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

+0

Я ищу скорее какое-то общее решение. Есть несколько способов определить, сколько вычислительной мощности процессора и памяти используется программой. Таким образом, должен быть некоторый метод для определения минимальной (или рекомендуемой) аппаратной спецификации, основанной на них, и я ищу некоторый пример. Это даже не должно быть основано на Java. – Marcon

+0

Многие программы будут использовать больше ресурсов, если они доступны, но также могут ужиться с меньшими затратами. Кроме того, требуемые ресурсы могут сильно зависеть от нагрузки - нередко она как-то (как правило, нелинейная) масштабируется с размером и частотой ввода или некоторым другим качеством входных данных. – Hulk

+2

В принципе, вы можете только проверить и измерить - вы не можете легко прогнозировать производительность на разных аппаратных средствах. – Hulk

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