Ermitteln des aktuellen CPU & Memory Verbrauchs der laufenden FHEM Instanz

Begonnen von hasselh, 13 April 2025, 11:59:31

Vorheriges Thema - Nächstes Thema

hasselh

Hallo zusammen:

Die ursprüngliche Idee kommt eigentlich aus einem anderen Thread (Memory leak in 01_FHEMWEB.pm ?).
Aber ich dachte ich poste es mal hier, falls es jemand gebrauchen kann:

define fhem_usage DOIF { [+60];; \
  use Memory::Usage;; my $mu=Memory::Usage->new;; $mu->record;; set_Reading_Begin;;\
  for (0..4) { set_Reading_Update(("vsz","rss","shared","code","data")[$_ ],\
    sprintf("%.2f",$mu->state->[0]->[$_+2]/1024));; }\
  my $lt=[$SELF:time,0];; set_Reading_Update("time",time(),0);; \
  my $dt=[$SELF:time,0]-$lt;; return if (! $dt);; my ($u,$s,$cu,$cs)=times;;\
  my $lu=[$SELF:usr_total,0];; my $ls=[$SELF:sys_total,0];; \
  set_Reading_Update("usr_total",$u,0);; set_Reading_Update("sys_total",$s,0);;\
  $cu=($u-$lu)/$dt*100;; $cs=($s-$ls)/$dt*100;; return if ($cu <= 0 || $cs <= 0);;\
  set_Reading_Update("usr_pct",sprintf("%.2f",$cu));;\
  set_Reading_Update("sys_pct",sprintf("%.2f",$cs));;\
  set_Reading_Update("cpu_pct",sprintf("%.2f",$cu+$cs));;\
  set_Reading_End(1);; }

Die Ergebnisse werden in regelmäßigen Abständen in den folgenden Readings abgelegt:

    CPU
    • usr_pct - FHEM instance User CPU in percent
    • sys_pct - FHEM instance System CPU in percent
    • cpu_pct - FHEM instance CPU in percent (sum of usr_pct + sys_pct)
    Memory
    • code - text (aka code or exe) size in MB
    • data - data and stack size in MB
    • rss - resident set size in MB
    • shared - shared memory size in MB
    • vsz - virtual memory size in MB