Спектральный анализ сервера

от автора

Что будет, если к Perfmon применить быстрое преобразование Фурье? Или функцию корреляции? Получится #черте_что!

У меня есть сервер, на котором идет много периодических процессов. Если записать его CPU с разрешением 1 секунда, то получится примерно вот что:

Мы видим некую периодичность, но как лучше увидеть ee в чистом виде, очистить от шума?

Первое, что мне пришло в голову, это быстрое преобразование Фурье:

import csv import numpy as np import matplotlib.pyplot as plt import scipy.fftpack  ...  N = len(cpu) x = np.linspace(0.0, N/60., N) yf = scipy.fftpack.fft(cpu)

Нас интересуют частоты порядка минут, поэтому ограничим ось x соответственно:

Четко видны ‘собственные частоты’, на которых ‘звучит‘ ваш сервер. С многими пиками я могу связать job schedule. Но гармоник здесь слишком много, и вторая идея, которая мне пришла в голову такова: для того, чтобы понять периодичность, применим самокорреляцию (ненормированную):

import numpy as np import matplotlib.pyplot as plt  ...  x2 = np.linspace(-N/2/60., N/2/60., N) corr = np.correlate(cpu,cpu,mode='same')

Мне кажется что на данном графике сердцебиение вашего сервера видно наиболее явно. Для сравнения построим те же графики для другого сервера с другим профилем нагрузки, где она флуктирует, но нет явной периодичности:

Только не спрашивайте, пожалуйста, какой в этом смысл! Это кодобред! А вот более полезный способ работы с серверами.


ссылка на оригинал статьи https://habr.com/ru/post/645239/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *