Autor Thema: FHEM Log Cannot fork: Cannot allocate memory  (Gelesen 12509 mal)

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4659
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #75 am: 06 Dezember 2017, 14:42:58 »
short: händisch ja, automatisch nein.

long: Jeder Eintrag im heap (+stack ;)) müsste manuell erforscht und einem modul zugeordnet werden. Das dauert "etwas" ;) Im Zweifel ist es besser 2 dumps anzulegen. Einen nach dem Start und einen wenn der Speicher "voll läuft". Dort sucht man nach Auffälligkeiten. Es gibt auch Speicherleichen die aus FHEM (also "von innen") überhaupt nicht mehr finden lassen.

Beispiel:
sub
test {
  my $a;
  my $b;

  $a->{b} = \$b;
  $a->{0} = [1..65535];
  $b->{a} = \$a;
  $b->{0} = [1..65535];
  return;
}
for (1..65535) {
  test();
}
)
for (1..65535) {
  test();
}

Nach dem Verlassen von "test" laufen "a" und "b" aus dem scope, bleiben aber im Speicher. Wenn "test" fertig ist kann man keine der beiden Variablen mehr erreichen (ergo löschen). Sie belegen jedoch weiter Speicher. Im Beipiel 65k x ein dutzend bytes.

Das Beispiel ist übersichtlich. closures, "$parent", rekursive functionen verstecken das oft so "gut" das es schwer zu sehen ist. Weil FHEM jedoch ein long running process ist summiert sich das. Es sind oft nur wenige bytes die "verloren" gehen. IO Operationen (Netzwerk Kommikation) findet aber so oft statt das sich auch kleine leaks (bugs) im Laufe von Tagen / Wochen summieren.

Aus dem verlinkten dokument:
Zitat
As the user guide explains:

    The basic workflow consists of two main stages: first a heap dump file is generated from the perl process being debugged, at or around the time that the problem becomes apparent, and secondly this file is loaded by an analysis tool in order to inspect the contents.

    These two stages are described here separately. It is important to note that they don't have to be done at the same time, on the same perl process, or even on the same sort of machine. It is fully possible to capture the heap from a process on, say, a small server, then copy the file to a development workstation or laptop and analyse it there at a later time.

edit: codebeispiel
« Letzte Änderung: 06 Dezember 2017, 15:02:27 von herrmannj »
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4659
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #76 am: 06 Dezember 2017, 14:47:30 »
Bitte schön

https://forum.fhem.de/index.php/topic,73490.msg653927.html#msg653927
yepp. Aber leaks wie aus dem post darüber sieht man damit auch nicht.
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15236
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #77 am: 06 Dezember 2017, 14:49:04 »
Nun sei mal nicht so Jörg. Bin froh mich mit 40 überhaupt noch an den Thread erinnern zu können  ;D 8)

Ach so.
Jörg hat Recht  :)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4248
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #78 am: 06 Dezember 2017, 15:17:27 »
@CoolTux:

Was soll ich sagen, ich habe es gelesen, ausprobiert und einen Tag später .... aber 40 ist wirklich nicht mehr viel los mit einem  :o

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline frank

  • Hero Member
  • *****
  • Beiträge: 6697
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #79 am: 07 Dezember 2017, 13:15:06 »
Thema ist zwar schon älter, aber die Meldung habe ich die letzten Tage auch immer mal wieder im Log. Eine Frage, die indirekt damit zu tun hat, kann ich irgendwie auf die Meldung Triggern. Soll heißen ich würde mir gerne eine Nachricht schicken lassen, wenn diese Meldung im Log auftaucht um Zeitnah zu schauen. Soll heißen gibt es ein entsprechendes EVENT dazu?
notify's können mit attr readLog auch auf fhem.log lauschen.  ;)
FHEM: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2438
  • Anti-Statement befreite Zone ;)
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #80 am: 07 Dezember 2017, 13:31:08 »
notify's können mit attr readLog auch auf fhem.log lauschen.  ;)

Schau an, gut zu wissen. Werde ich mich die Tage mal dran machen und versuchen. Dank dir.
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4248
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #81 am: 07 Dezember 2017, 14:45:56 »
Wenn Du etwas gefunden hast, könntest Du deine Lösung posten?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2438
  • Anti-Statement befreite Zone ;)
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #82 am: 09 Dezember 2017, 12:04:18 »
also das notify war kein Problem. Jetzt wollte ich mit dem debugbefehl: fhemdebug memusage arbeiten, aber dieser lässt mein FHEM direkt ohne Meldung abstürzen. Ich habe Devel::Size sowohl über cpanm Devel::Size als auch mittels apt-get -s install libdevel-size-perl
als auch apt-get install libdevel-size-perl installiert bzw. versucht. Kann ich irgendwie prüfen ob es klappt bzw. warum es nicht klappt?
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4248
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #83 am: 09 Dezember 2017, 17:55:47 »
d.h. enn Du (auch manuell)? aufrufst:
fhemdebug memusage

Ist fhem sofort weg? Was sagt denn das Log?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2438
  • Anti-Statement befreite Zone ;)
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #84 am: 09 Dezember 2017, 18:19:09 »
korrekt, auch dann. Mit ohne Meldung meinte ich, dass auch im Log keine Meldung mehr kommt. Ist direkt weg und nix geht mehr. In der Beschreibung von Rudi steht ja, dass es zum Absturz kommen kann, weiß nur nicht, wie ich das verhindern kann.
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4248
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #85 am: 09 Dezember 2017, 18:34:04 »
Sorry, da kann ich Dir nicht helfen, da müssen wir auf "tiefere" Experten warten
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18827
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #86 am: 09 Dezember 2017, 18:49:14 »
Eigentlich muesste Devel::Size gefixt werden, dazu habe ich aber keine Musse.
Falls das Perl-Modul nicht installiert ist, dann meldet FHEM das direkt.

Ich habe eine neue Version eingecheckt, der bei "attr global verbose 5" das naechste Element ausgibt, was geprueft wird. Nach einem Absturz sollte das als Letztes im fhem-Log stehen.

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2438
  • Anti-Statement befreite Zone ;)
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #87 am: 09 Dezember 2017, 22:52:09 »
Werde es die Tage prüfen und mich melden. Danke
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline abc2006

  • Sr. Member
  • ****
  • Beiträge: 672
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #88 am: 25 Januar 2018, 16:50:10 »
Hi,
nachdem ich jetzt viel Hilfe von Heiko erhalten habe, komm ich hier mal rein:

Ich hab das Problem, dass logdb async in letzter Zeit regelmäßig abstürzt, und mittlerweile herausgefunden, dass es an "can not allocate memory" liegt.
Das Problem war heute gerade wieder aktuell, weshalb ich diesen Thread gefunden habe.
Daraufhin hab ich "fhemdebug memusage" ausgeführt, natürlich ohne vorher global auf verbose 5 zu schalten. FHEM ist genauso natürlich abgestürzt.
Wenn ich jetzt am (frisch gestarteten) FHEM das fhemdebug memusage ausführe, stürzt es ebenfalls ab. Im Log stehen dann diese Meldungen:

2018.01.25 16:38:25.123 5: Cmd: >fhemdebug memusage<
2018.01.25 16:38:25.124 5: Loading ./FHEM/98_fhemdebug.pm
2018.01.25 16:38:25.142 5: main::oldvalue
2018.01.25 16:38:25.145 5: main::FW_fhemwebjs
2018.01.25 16:38:25.146 5: main::cmds
2018.01.25 16:38:25.147 5: main::FW_detail
2018.01.25 16:38:25.147 5: main::reread_active
2018.01.25 16:38:25.148 5: main::overload::numbers::names
2018.01.25 16:38:25.148 5: main::overload::category
2018.01.25 16:38:25.148 5: main::overload::constants
2018.01.25 16:38:25.149 5: main::overload::ops
2018.01.25 16:38:25.149 5: main::overload::BEGIN
2018.01.25 16:38:25.149 5: main::overload::package
2018.01.25 16:38:25.149 5: main::constant::BEGIN
2018.01.25 16:38:25.150 5: main::constant::__ANON__
2018.01.25 16:38:25.150 5: main::constant::declared
2018.01.25 16:38:25.151 5: main::integer::hint_bits
2018.01.25 16:38:25.151 5: main::Symbol::EXPORT
2018.01.25 16:38:25.152 5: main::Symbol::BEGIN
2018.01.25 16:38:25.152 5: main::Symbol::EXPORT_OK
2018.01.25 16:38:25.152 5: main::Symbol::ISA
2018.01.25 16:38:25.153 5: main::FH1
2018.01.25 16:38:25.153 5: main::INC
2018.01.25 16:38:25.154 5: main::selectlist
2018.01.25 16:38:25.157 1: PERL WARNING: Devel::Size: Unknown variable type: 251 encountered
2018.01.25 16:38:25.157 1: stacktrace:
2018.01.25 16:38:25.158 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (141)
2018.01.25 16:38:25.158 1:     (eval)                              called by ./FHEM/98_fhemdebug.pm (123)
2018.01.25 16:38:25.158 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (149)
2018.01.25 16:38:25.158 1:     main::fhemdebug_memusage            called by ./FHEM/98_fhemdebug.pm (41)
2018.01.25 16:38:25.158 1:     main::fhemdebug_Fn                  called by fhem.pl (1169)
2018.01.25 16:38:25.158 1:     main::AnalyzeCommand                called by fhem.pl (1023)
2018.01.25 16:38:25.159 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2486)
2018.01.25 16:38:25.159 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (881)
2018.01.25 16:38:25.159 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (525)
2018.01.25 16:38:25.159 1:     main::FW_Read                       called by fhem.pl (3493)
2018.01.25 16:38:25.159 1:     main::CallFn                        called by fhem.pl (688)
2018.01.25 16:38:25.160 1: PERL WARNING: Devel::Size: Unknown variable type: 62 encountered
2018.01.25 16:38:25.160 1: stacktrace:
2018.01.25 16:38:25.160 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (141)
2018.01.25 16:38:25.160 1:     (eval)                              called by ./FHEM/98_fhemdebug.pm (123)
2018.01.25 16:38:25.160 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (149)
2018.01.25 16:38:25.160 1:     main::fhemdebug_memusage            called by ./FHEM/98_fhemdebug.pm (41)
2018.01.25 16:38:25.161 1:     main::fhemdebug_Fn                  called by fhem.pl (1169)
2018.01.25 16:38:25.161 1:     main::AnalyzeCommand                called by fhem.pl (1023)
2018.01.25 16:38:25.161 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2486)
2018.01.25 16:38:25.161 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (881)
2018.01.25 16:38:25.161 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (525)
2018.01.25 16:38:25.161 1:     main::FW_Read                       called by fhem.pl (3493)
2018.01.25 16:38:25.161 1:     main::CallFn                        called by fhem.pl (688)
2018.01.25 16:38:25.162 1: PERL WARNING: Devel::Size: Unknown variable type: 62 encountered
2018.01.25 16:38:25.162 1: stacktrace:
2018.01.25 16:38:25.162 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (141)
2018.01.25 16:38:25.162 1:     (eval)                              called by ./FHEM/98_fhemdebug.pm (123)
2018.01.25 16:38:25.162 1:     main::__ANON__                      called by ./FHEM/98_fhemdebug.pm (149)
2018.01.25 16:38:25.162 1:     main::fhemdebug_memusage            called by ./FHEM/98_fhemdebug.pm (41)
2018.01.25 16:38:25.163 1:     main::fhemdebug_Fn                  called by fhem.pl (1169)
2018.01.25 16:38:25.163 1:     main::AnalyzeCommand                called by fhem.pl (1023)
2018.01.25 16:38:25.163 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2486)
2018.01.25 16:38:25.163 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (881)
2018.01.25 16:38:25.163 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (525)
2018.01.25 16:38:25.164 1:     main::FW_Read                       called by fhem.pl (3493)
2018.01.25 16:38:25.164 1:     main::CallFn                        called by fhem.pl (688)

Liegt der Absturz am oben erwähnten Fehler von Devel::Size?
Wenn nein, was kann ich machen, damit es *nicht* abstürzt?
Kann jemand aus dem Log erkennen, was den Absturz von FHEM verursacht?


Wenns das nächste mal hängt, werd ich an verbose 5 denken und mich melden. Kann nicht lange dauern:)

Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL  50000 ;-)
CUL868v3 über USB ohne Repeater
Nutze zur Zeit FHT, HMS, FS20, HMW485
(Gateway HMW-LGW-O-DR-GS-EU, 2x HMW-IO-12-SW7-DR, 2x HMW-IO-12-Sw14-DR, 1x HMW-LC-Dim1L-DR) und OneWire
Erweiterung und Umbau auf KNX

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18827
Antw:FHEM Log Cannot fork: Cannot allocate memory
« Antwort #89 am: 25 Januar 2018, 20:05:35 »
Zitat
Liegt der Absturz am oben erwähnten Fehler von Devel::Size?
Vermutlich.

Zitat
Kann jemand aus dem Log erkennen, was den Absturz von FHEM verursacht?
Irgendetwas war in %selectlist, was Devel::Size::total_size nicht vertragen hat. Vermutlich hat einer der von Dir verwendeten Module was unuebliches an Datentyp reingeschrieben.

Ich habe gerade eine neue Variante von fhemdebug eingecheckt: es werden mehr interne Hashes detailliert gemessen (wie %selectlist), und es gibt ein Blacklist: das MAX-Modul und HTTPMOD Geraete werden nicht geprueft, da diese bei mir in einem Testsetup den Absturz bewirkt haben. Falls es bei dir auch mit dieser Version abstuerzt, dann bitte die letzten Zeilen bei "attr global verbose 5" hier anhaengen.

 

decade-submarginal