Cannot fork: Cannot allocate memory | BlockingInformParent

Begonnen von Burny4600, 14 Februar 2018, 10:33:06

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Die Datei in /opt/fhem/FHEM löschen und fhem neu starten.

tomcat.x

#646
Aus meiner Sicht reicht es, das Gerät zu löschen und fhem (mit Linux) neu zu starten. Auf jeden Fall reichte "set inactive" und/oder setzen des Attributs "disable" nicht.

Bei mir funktioniert es mit Auskommentieren in der cfg. Aber stimmt, ich hatte vor kurzem auch mal jemand empfohlen, nicht manuell zu editieren. Und bei einem Gerät, dass man nicht vorübergehend entfernen will und wo man vermutlich auch nur ein paar Attribute gepflegt hat, macht das keinen Sinn.
FHEM: 6.1 auf Raspi 3, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 7.57), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo

Damian

Zitat- DOIF mit perl 5.28 und bestimmten Attributen (Perl-Regexp-Bug, mit Workaround in DOIF geloest?)

Ist nicht richtig.

Es muss perl 5.24 heißen. siehe: https://forum.fhem.de/index.php/topic,84372.msg812511/topicseen.html#msg812511

Wer Raspberry benutzt, sollte auf jeden Fall auf Buster updaten, dort gibt es die 5.28 Perl-Version.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Hardlife

#648
Zu meiner großen Freude scheine ich den Fehler in meiner Konfiguration nun eingegrenzt/gefunden zu haben...  :)

Vielleicht ist die Ursache des Fehlers bei mir auch die Ursache der Fehler bei manch anderem Forenteilnehmer und man kann ihn fixen.
Da mir aber die tieferen Kenntnisse fehlen, kann ich keine "Rundum-Glücklich"-Anleitung anbieten und möchte darum bitten, ob es sich ein Profi ansehen könnte.
Ich konnte wie gesagt den Fehler nur eingrenzen, woran es wirklich genau liegt, kann ich nicht sagen... :(
Da der Fehler eigentlich in einer untergeordneten Funktion (TV-Programm) auftritt, könnte man als Ratschlag geben: "verzichte halt drauf"
Das würde jedoch wohl nicht wirklich das Grundproblem (das ja irgendwo im Code vorhanden sein muss) lösen, und auf der anderen Seite hängen wir sehr an der Funktion.


--> Ich weiß, viel Text, aber ich wollte nochmal alle meine Erkenntnisse zusammenfassen und auf den Punkt bringen. Vielleicht hilfts ja wem.


Kurze rückblickende Zusammenfassung:

  • FHEM läuft bei mir auf einem Raspberry Pi
  • mein Leidensweg begann mit einem Update im Jänner 2019
  • alle 19 Stunden startet mein FHEM seither neu
  • meine RAM-Grundauslastung liegt bei ca. 180MB - Neustart erfolgt automatisiert bei 600MB
  • Neustart noch vor auftreten "Cannot allocate...", da sich FHEM beim Neustarten manchmal verhaspelte
  • seither suche und probierte ich an den verschiedensten Ecken
  • da es mein Produktivsystem betrifft, und FHEM bei mir die ganze Wohnung steuert, war es nicht einfach
  • der Fehler trat gleichermaßen mit Raspbian "Jessie" / "Stretch" / "Buster" auf
  • Ich habe die Perl-Versionen 5.20 / 5.24 / 5.28 versucht - kein Erfolg
  • mit einem Backup-Image vom 12.10.2018 gibt es keinerlei Probleme
  • ich schließe dadurch auf ein Problem innerhalb der FHEM-Umgebung, da der Unterbau und die Perl-Versionen wie angesprochen mit der aktuellem FHEM durchprobiert wurden
  • nehme ich ein Raspbian "Jessie" / "Stretch" / "Buster" mit den jeweils aktuellen Paketen (apt dist-upgrade) und das FHEM von 12.10.2018 - tritt das Problem nicht auf
  • Ich habe NICHT im Einsatz: ECHODEVICE / SSCAM / APPTIME / FREEZEMON
  • plotfork und plotEmbed habe ich versuchsweise deaktiviert - keine Besserung
  • ich habe den Tipp aus https://forum.fhem.de/index.php/topic,84372.msg970863.html#msg970863 angewandt, konnte aber nichts feststellen
  • das brachte mich auf die leider falsche Fährte von FHEMWEB - daran lag´s nicht
  • auch habe ich die Module per reload (https://forum.fhem.de/index.php/topic,84372.msg971563.html#msg971563) einzeln abgeklopft und kam zu keinem Ergebnis
  • mit "fhemdebug memusage" konnte ich leider nichts lokalisieren


Was des Fehler ans Tageslicht beförderte:

  • schweren Herzens habe ich begonnen, an meinem Produktivsystem jeweils alle Device´s eines Moduls, sowie damit verknüpfte in der fhem.cfg vorübergehend auszukommentieren
  • da mein System wie gesagt von Heizung/Licht/Alarm/Multimedia/Rollo/undundund de ganze Wohnung mit ca. 1000 Device´s steuert, war das echt bitter
  • und hat Wochen gedauert
  • ich habe sogar FHEMWEB für Tage rausgenommen
  • da merkt man erst, wie man sich an all die Annehmlichkeiten des Systems gewöhnt hat


Was war die Ursache:

  • Ganz am Ende meiner fhem.cfg befindet sich mein geliebtes und vielgenutztes Fernseh-Programm
  • Inspiriert und weiterentwickelt nach Beispielen aus dem Thread: https://forum.fhem.de/index.php/topic,28123.0.html
  • Über HTTPMOD und regex zeichnet mir FHEM eine tolle Programmübersicht auf den Schirm, die wir sehr gern nutzen
  • die Funktion ist zwar mega-umfangreich und kompliziert, löst meine Aufgabenstellung aber sehr gut/schön und genau so wie ich es möchte
  • Seit ich das rausgenommen habe, ist der Speicher stabil
  • Ich habe zwar noch 2 andere kleine HTTPMOD+RegEx (Fahrtdauer-Arbeit + Spritpreise) im Einsatz, aber die sind bei weitem nicht sooo umfangreich - die dürften entweder sauber laufen oder eben einfach negierbar sein


Vielleicht könnte ein Profi untenstehenden Config in seine fhem.cfg übenehmen?
Bis auf die Icons, die ich mir selbst zusammengeschustert habe, dürfte man dann ein TV-Programm haben UND den damit verbundenen Speicheranstieg in Realtime beobachten können.
Dadurch hätte man ein Basis für eine qualifizierte Fehlersuche.

______________________________
EDIT: CODE angehängt als TXT-Datei
______________________________
Raspi 4B
nanoCUL-868 & 433,JeeLink,milight,Signalduino,GPIO-433er-Sender/Empfänger, GPIO-Infrarot,GSM-Stick für SMS
MAX!-Heizungssteuerung,Intertechno-V1-Steckdosen + V3-Dimmer,"Flamingo FA21RF"-Funk-Rauchmelder
433er-China-Bewegungsmelder,"Voltcraft CO20"-Stick,LaCrosse-Temperatur,Revolt-NC5462

rudolfkoenig

Soweit ich sehe, besteht diese Konfiguration aus zwei HTTPMOD Instanzen mit jeweils 100+ readingRegexps, und dem zugehoerigen readingsGroup.

Kannst Du bitte noch ein Versuch ohne readingsGroup bauen, um festzustellen, welche der beiden Module das Problem verursacht, und danach in dem zum Modul passenden Forums-Abschnitt eine neue Diskussion oeffnen?

mumpitzstuff

Kannst du noch bitte den Code für diese Funktion anhängen?

wrapLine

Dann würde ich mal versuchen unter Buster diese Dinge einzubinden und zu gucken ob es bei mir auch zu diesem Problem kommt.

Hardlife

#651
Zitat von: mumpitzstuff am 07 Oktober 2019, 13:10:03
Kannst du noch bitte den Code für diese Funktion anhängen?

wrapLine

Ups, vergessen...
Habe ich in der 99_myUtils.pm

#####################################
### Zeilenumbruch für TV-Programm ###
#####################################

sub
wrapLine($$)
{
  my ($string, $maxLength) = @_;
  $string = decode_entities($string);
my @stringParts = split(/ /, $string);
  my $actRowLength = 0;
  my $resultString = '';
  while (scalar(@stringParts) > 0) {
  my $tempString = shift @stringParts;
    if ($actRowLength > 0)
    {
    if (($actRowLength + length($tempString)) > $maxLength)
      {
      $actRowLength = 0;
        $resultString .= '<br>';
      }
    }
    $resultString .= $tempString;
    $actRowLength += length($tempString);
    if (scalar(@stringParts) > 0)
    {
    $resultString .= ' ';
    $actRowLength += 1;
    }
  }
  if ($resultString eq '')
  {
  return ' ';
  }
  else
  {
  return $resultString;
  }
}

#### ENDE ### Zeilenumbruch #############



Danke für Deine Unterstützung, wär toll, wenn man den Fehler finden würde...
Raspi 4B
nanoCUL-868 & 433,JeeLink,milight,Signalduino,GPIO-433er-Sender/Empfänger, GPIO-Infrarot,GSM-Stick für SMS
MAX!-Heizungssteuerung,Intertechno-V1-Steckdosen + V3-Dimmer,"Flamingo FA21RF"-Funk-Rauchmelder
433er-China-Bewegungsmelder,"Voltcraft CO20"-Stick,LaCrosse-Temperatur,Revolt-NC5462

Hardlife

Zitat von: rudolfkoenig am 07 Oktober 2019, 12:48:26
Soweit ich sehe, besteht diese Konfiguration aus zwei HTTPMOD Instanzen mit jeweils 100+ readingRegexps, und dem zugehoerigen readingsGroup.

:-[ :-[ :-[

Zitat von: rudolfkoenig am 07 Oktober 2019, 12:48:26
Kannst Du bitte noch ein Versuch ohne readingsGroup bauen, um festzustellen, welche der beiden Module das Problem verursacht, und danach in dem zum Modul passenden Forums-Abschnitt eine neue Diskussion oeffnen?

Ich versuche das, sobald ich ein paar Minuten übrig habe...
Raspi 4B
nanoCUL-868 & 433,JeeLink,milight,Signalduino,GPIO-433er-Sender/Empfänger, GPIO-Infrarot,GSM-Stick für SMS
MAX!-Heizungssteuerung,Intertechno-V1-Steckdosen + V3-Dimmer,"Flamingo FA21RF"-Funk-Rauchmelder
433er-China-Bewegungsmelder,"Voltcraft CO20"-Stick,LaCrosse-Temperatur,Revolt-NC5462

jailbreaker07

Hallo,

weiß nicht in wie weit das hier helfen könnte... Um 16 Uhr macht ein script immer automatisch ein Backup von fhem. In dem Diagramm ist ist heute genau um diese Uhrzeit zu sehen wie der freie Speicher von 5 GB auf 2,5 GB abfällt....

#!/bin/bash

mountIp="192.168.1.20"
mountDir="raspberry/backup"
mountUser="xxx"
mountPass="xxx"
mountSubDir="fhem"
localMountPoint="/mnt/backup"

#optional
backupsMax="40"
localBackupDir="/backup"
pushoverUser="xxxxx"
pushoverToken="xxxxx"
###################################

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"

if [ ! -e "$localBackupDir" ]
then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi

tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null

if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup error"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
exit
else
echo "$mountIp erreichbar"
fi

localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')

if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi

if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
vorhanden="0"
while read line
do
mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlm,vers=1.0 0 0"
echo "mountComplete: $mountComplete"
if [ `echo "$line" | grep -c "$mountComplete"` != 0 ]
then
echo "/etc/fstab: Eintrag bereits vorhanden: $mountComplete"
vorhanden="1"
break
fi
done < "/etc/fstab"
if [ "$vorhanden" != "1" ]
then
echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
echo "$mountComplete" >> "/etc/fstab"
fi
echo "Mounts werden aktualisiert"
mount -a
sleep 3
fi

if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*fhem_backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"
if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
then
curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup mit $fileSizeMB MB wird erstellt" https://api.pushover.net/1/messages.json
fi
#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup off"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backup $filename"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup done"
done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi

#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax $backupsMax"
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
else
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax no limit"
fi

backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFiles $backupsCurrent"




Gruß

Thorsten

Mave

#654
Wie sieht denn eigentlich der idealtypische Verlauf einer Speicherauslastung aus?

Mein Speicherverbrauch ist seit 2 Tagen von ca. 200 MB auf ca. 270 MB angestiegen. Wenn das linear so weiterläuft, dann knallt es in ein paar Tagen. Wenn sich der Wert irgendwo einpendelt, ist alles gut.

Deshalb meine Frage, wie die Kurve idealtypisch aussieht...

rudolfkoenig

So wie im Anhang zu meinem Beitrag hier https://forum.fhem.de/index.php/topic,84372.msg981088.html#msg981088 von Vorgestern.
Allerdings ist mein System mit 200 defines von 30 unterschiedlichen Modulen eher klein, und wird seit Jahren kaum angefasst.


Mave


HomeAuto_User

@Hardlife, den Fehler bei dir kann ich bestätigen. Sobald du das TV Programm mit HTTPMOD umsetzt und unzähligen Readings kommt es zu dem Fehler. Bei mir auch so und mehrfach verifiziert.

Ich selbst bastel an einem Modul nun, wo ich das ganze ohne HTTPMOD umsetze.


Gesendet von iPhone mit Tapatalk Pro
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Hardlife

Zitat von: rudolfkoenig am 07 Oktober 2019, 12:48:26
Kannst Du bitte noch ein Versuch ohne readingsGroup bauen, um festzustellen, welche der beiden Module das Problem verursacht, und danach in dem zum Modul passenden Forums-Abschnitt eine neue Diskussion oeffnen?

Ok, habs getestet.
Liegt wohl definitiv an HTTPMOD (oder den RegEx-Aufrufen).
Ich setzte einen Post in den zugehörigen Thread https://forum.fhem.de/index.php/topic,45176.0.html
Vielleicht kann man dort die Ursache finden...


Zitat von: HomeAuto_User am 08 Oktober 2019, 16:01:15
@Hardlife, den Fehler bei dir kann ich bestätigen. Sobald du das TV Programm mit HTTPMOD umsetzt und unzähligen Readings kommt es zu dem Fehler. Bei mir auch so und mehrfach verifiziert.

Vielen Dank für die Unterstützung und Bestätigung.
Ich dachte schon, ich werd wahnsinnig mit dem doofen Fehler  :o
Ich werde wie oben beschrieben eine Post setzten - vielleicht möchtest Du Dich der Fehlersuche anschließen.


Zitat von: HomeAuto_User am 08 Oktober 2019, 16:01:15
Ich selbst bastel an einem Modul nun, wo ich das ganze ohne HTTPMOD umsetze.

Kann man das Modul bereits testen? Gibts da einen Thread dazu?
Raspi 4B
nanoCUL-868 & 433,JeeLink,milight,Signalduino,GPIO-433er-Sender/Empfänger, GPIO-Infrarot,GSM-Stick für SMS
MAX!-Heizungssteuerung,Intertechno-V1-Steckdosen + V3-Dimmer,"Flamingo FA21RF"-Funk-Rauchmelder
433er-China-Bewegungsmelder,"Voltcraft CO20"-Stick,LaCrosse-Temperatur,Revolt-NC5462

mumpitzstuff

#659
Bei mir steigt mit dem HTTPMOD Device (habe das TV Device von oben importiert) der Speicherverbrauch ebenfalls an (Debian Buster). Der Anstieg selbst ist abhängig vom Intervall, je kürzer desto stärker ist der Anstieg. Setzt man das Device auf disable steigt der Verbrauch nicht weiter an. Die Readingsgroups habe ich rausgeschmissen und kann sie deshalb ebenfalls ausschließen.

Eine Sache ist mir bei deinen Regex Ausdrücken aufgefallen. Ersetz mal bitte alle:
</a>
durch
<\/a>

Meines Wissens muss ein / immer Escaped sein.