Pull to refresh

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

Reading time1 min
Views4.3K

Что будет, если к 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')

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

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

Tags:
Hubs:
Total votes 15: ↑14 and ↓1+18
Comments13

Articles