Как смоделировать нагрузку
Я должен написать программу (Perl, Python или Java) для имитации рабочей нагрузки на нашем сервере, так что она принимает 2 аргумента:
объем памяти
Время
И на основе этих аргументов он должен запустить процесс, который потребляет указанный объем памяти в течение указанного промежутка времени. Максимальное значение памяти может достигать 50-100 ГБ, а время может составлять до 12-24 часов.
Я не могу использовать разветвление или многопоточность, этот процесс должен быть одним потоком и должен непрерывно выполнять операции (например, целое число / число с плавающей запятой и т. Д.). Я также не хочу выполнять операции ввода-вывода.
Самый простой способ, которым я мог придумать, был:
1. while(timeSpent < timeLimit || memoryConsumed < memorySpecified){
2. if(memoryConsumed < ){
3. Add random number to ArrayList
4. }else{
5. Multiply all numbers (Do some exception handling to prevent this from overflowing)
6. }
7. }
Пожалуйста, дайте мне знать, если есть лучший способ сделать это.
Спасибо,
Amit
3 ответа
Я использую утилиту стресса weather.ou.edu/~apw/projects/stress ... хотя немного подправил его, чтобы расширить возможности, которые я хотел...
Спасибо за помощь ребята.
Разве что-то вроде этого кода Python не подходит для ваших нужд?
import argparse
import datetime
def main():
parser = argparse.ArgumentParser(description = "Consume memory and time.")
parser.add_argument('memory', metavar = 'M', type=int, help = "memory (in megabytes) to consume")
parser.add_argument('time', metavar = 'H', type=int, help = "time (in hours) to consume")
args = parser.parse_args()
data = bytearray(args.memory * 1000000)
now = datetime.datetime.today()
finish = now + datetime.timedelta(hours = args.time)
while now < finish:
for i in xrange(args.memory * 1000000):
data[i] = now.second
now = datetime.datetime.today()
if __name__ == '__main__':
main()
Ваш пример кажется разумным, по крайней мере, для первого шага. Однако есть много мелких деталей, чтобы получить право:
- Вы говорите, что не хотите выполнять ввод / вывод, и это нормально, однако при выделении 50–100 ГБ на современном компьютере вы будете выполнять ввод / вывод независимо от того, хотите вы этого или нет (из-за ошибок страницы) так что вы можете переопределить свою спецификацию там.
- Кроме того, примите во внимание гранулярность ваших "объектов", многие приложения для научных вычислений не могут понять принцип "много мелких объектов". Многие хотят иметь какой-то параметр для баланса между "множеством мелких объектов" и "несколькими крупными объектами".
- Кроме того, умножая или добавляя все значения данных в вашем контейнере, вы можете генерировать последовательность сбоев страниц, которые ОС может легко предсказать, и, следовательно, они нереалистичны в реальном мире. Возможно, вы захотите добавить некоторую случайность при прохождении Это.
Это более тонкая проблема, чем кажется, и многие хотят начать с простых и, возможно, даже со стандартных тестов, таких как: SETI или raytracer.