Algoritmo per la rappresentazione grafica dei dati dell'heap dalla memoria del server, per un lungo periodo di tempo

0

In questo momento sto raccogliendo informazioni sulla memoria su un server node.js ogni 100 secondi. Voglio mostrare le informazioni sull'utilizzo della memoria come un grafico sul front-end.

const mem = {
  heapTotals: [],
  heapUseds: [],
  maxHeapTotal: 0,
  maxHeapUsed: 0
};

setInterval(function () {

  const m = process.memoryUsage();
  mem.heapTotals.push(m.heapTotal);
  mem.heapUseds.push(m.heapUsed);

  if (m.heapTotal > maxMem.maxHeapTotal) {
    mem.maxHeapTotal = m.heapTotal;
  }
  if (m.heapUsed > maxMem.maxHeapUsed) {
    mem.maxHeapUsed = m.heapUsed;
  }

}, 100000);

Non lo stiamo memorizzando in un db, o qualcosa, solo nella memoria. Certo, continuiamo a spingere su quell'array ogni 100 secondi, inizierà a crescere nel tempo se il nostro server è attivo per un po '.

Sto cercando un algoritmo divertente che possa essere utilizzato ogni 100 secondi per perfezionare l'array, in modo che non contenga più di 2000 voci.

Ho bisogno di un modo per passare attraverso l'array esistente, rimuovere gli elementi passati, ma fare la media con i loro pari, in modo che il grafico sia piuttosto scorrevole.

Dire che ho questo:

[3,3,5,5,6,7,9,2,3,5,3,6,4,8,8,4,4,5]  (18 items)

Lo ridurrebbe prendendo ogni 3 ° elemento e facendo una media e due prima di esso, quindi sarebbe:

[(3+3+5)/3,(5+6+7)/3,(9+2+3)/3,(5+3+6)/3,(4+8+8)/3,(4+4+5)/3] 

Qualcosa del genere. Tuttavia questo non è davvero un algoritmo completo. Qualcuno sa qual è il modo giusto / migliore per fare ciò in modo che il grafico sia accurato, ma non va oltre le 2000 voci di array ecc?

    
posta Olegzandr Denman 02.03.2018 - 00:54
fonte

1 risposta

0

Stai confondendo due concetti separati: valori più recenti e media.

Probabilmente l'utente vorrà vedere i valori più recenti e / o la media, ma una combinazione dei due è difficile da ricavare significati significativi da. Se i valori vengono persi "uniformemente", quindi senza il contesto del timestamp, significa in definitiva poco. Supponendo che fosse un timestamp, il grafico che questi dati avrebbero fatto avrebbe avuto punti con buchi significativi in essi.

Posso raccomandare di avere tre parametri:

  • N valori più recenti: semplicemente un array contenente gli ultimi N valori più recenti. Se questo aggiornamento avviene ogni 100 secondi, un buon valore N potrebbe essere 18 (poiché questa sarebbe l'ultima mezz'ora).
  • N controlli di stato giornalieri - Ogni 18 valori (mezz'ora), si calcola la media dei valori N più recenti e si aggiunge la media qui. Se ne hai 48, puoi coprire un periodo di 24 ore.
  • Somma giornaliera - Calcola la media delle N verifiche di stato giornaliere in un unico valore rappresentativo del tempo medio. Questo viene ricalcolato ogni volta che gli aggiornamenti quotidiani dello stato di controllo.

Potresti anche considerare di avere altri valori. I valori massimi o minimi possono fornire informazioni pertinenti su casi estremi che potrebbero essere di interesse. Il valore medio può essere più interessante da sapere rispetto alla media stessa (50% sopra e 50% sotto mentre la media può variare troppo dai picchi). Potresti anche voler calcolare la deviazione standard (+ -3 deviazioni standard dalla media dovrebbero darti il 99,7% di tutti i valori possibili).

    
risposta data 02.03.2018 - 08:44
fonte

Leggi altre domande sui tag