FHEM Log Cannot fork: Cannot allocate memory

Begonnen von michael.winkler, 23 Juni 2017, 07:43:04

Vorheriges Thema - Nächstes Thema

michael.winkler

Hallo,

leider habe ich über die Suchfunktion zu meinem Problem nichts gefunden.

Mein FHEM Log füllt sich nach eine Laufzeit von ca. 3-4 Tagen immer wieder mit folgenden Meldungen:


2017.06.23 07:36:19 1: Cannot fork: Cannot allocate memory
2017.06.23 07:36:19 1: Cannot fork: Cannot allocate memory
2017.06.23 07:36:21 1: Cannot fork: Cannot allocate memory
2017.06.23 07:36:21 1: Cannot fork: Cannot allocate memory


Nur ein Reboot des Linux Systemes schaft hier Abhilfe. Den einzigen Hinweis den ich gefunden habe, ist dass man bei dieser Meldung im Device "global" das Attribut updateInBackground auf 0 stellen soll. Leider hat das bei mir nicht geholfen, die Meldung erscheinen trotzdem wieder.

Sobald diese Meldung im Log erscheinen ist ein Update oder shutdown aus FHEM heraus nicht mehr möglich.

Kann mir hier jemand weiterhelfen?

Gruß
Michael



rudolfkoenig

Dass update nicht moeglich is, ist verstaendlich, da es per Voreinstellung forkt (attr global updateInBackground). shutdown restart macht das auch, warum shutdown (ohne restart) nicht funktioniert, kann ich nicht erklaeren.

Das Problem genau zu lokalisieren ist nicht einfach. Man muesste zunaechst feststellen, welcher der Prozesse den meisten Speicher verbraucht (z.Bsp. mit ps -elf | sort -rnk 10 | head). Falls FHEM ungewoehnlich gross ist/waechst, dann muss man die Module finden, die dafuer verantwortlich sind, z.Bsp. indem man sie einzeln deaktiviert.

michael.winkler

Hallo

Befehl hab ich mal ausgeführt. Anbei das Ergebnis:

root@HNMWFHEM01:~# ps -elf | sort -rnk 10 | head
4 S root      2422  2331  0  80   0 - 192259 -     Jun20 ?        00:01:20 homebridge
0 S root      1878     1  0  80   0 - 187335 -     Jun20 ?        00:00:59 alexa
1 S fhem      3639     1  3  80   0 - 173279 -     Jun20 ?        02:23:32 /usr/bin/perl fhem.pl fhem.cfg
4 S mysql     2791  2450  0  80   0 - 91021 -      Jun20 ?        00:01:54 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
5 S www-data  3871  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data  2171  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data  2170  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data  2165  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data  2164  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start
5 S www-data  2163  2149  0  80   0 - 55818 -      Jun20 ?        00:00:00 /usr/sbin/apache2 -k start


Wernieman

#3
Für die Grundsätzliche Analyse würde ich auch vorschlagen, das mehr Infos über das System bereit gestellt werden.
- was ist es für Hardware (ÜPi/PC/Speicher/Gestplatte etc.)
- was macht der Rechner außer FHEM?
- was für Module werden in FHEM verwendet
- .....
- und natürlich die Info, welche Rudolf schon anfragte

Sorry aber bitte um mehr Input für qualifizierten Output ....

Edit:
Wenn ich die ersten 3 Zeilen Zusammenzähle. komme ich schon auf 552873Byte ...
Zitat4 S root      2422  2331  0  80   0 - 192259 -     Jun20 ?        00:01:20 homebridge
0 S root      1878     1  0  80   0 - 187335 -     Jun20 ?        00:00:59 alexa
1 S fhem      3639     1  3  80   0 - 173279 -     Jun20 ?        02:23:32 /usr/bin/perl fhem.pl fhem.cfg
Braucht homebridge und alexa wirklich so viel Speicher???
- 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

rudolfkoenig

@Werniemann: ich waere vorsichtig beim Addieren, ich gehe davon aus, dass diese Zahlen die dynamisch geladenen Bibliotheken jeweils enthalten. D.h. der Programmcode von libc wird zu jedem Prozess dazugezaehlt, liegt aber nur einmal im Speicher, dh. beim Addieren darf man diesen Teil nur einmal rechnen. Beim apache2 wird der gemeinsame Anteil wesentlich sein.

Trotzdem meine Meinung: der Rechner ist fuer diese Aufgabe (bzw. Kombination aller Aufgaben) unterdimensioniert.

Wernieman

@Rudolf

Du hast prinzipiell recht, war nur eine Überschlagsrechnung. Aber egal wie ... wenn es ein Pi ist, wovon ich momentan ausgehe, ist der Speicher zu klein. Auch wenn diese "Pi mal Daumen Rechnung" nur sehr grob ist ...

Wenn es dagegen ein "Richtiger Rechner" mit mehr Speicher, würde es schon anders aussehen. Deshalb meine Nachfrage nach der Art des Rechners ...
- 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

michael.winkler

danke schon mal für das Feedback.

Mein FHEM läuft als virtuelle Machine und ist wie folgt Ausgestattet:

512MB RAM
CPU Intel i7 2,67GHz
40GB HDD auf SSD

Der Rechner selber macht nur FHEM, Alexa und Homebridge. Bis vor kurzem wurde noch SmartVISU auf dem Rechner betrieben. Dies ist aber aktuell nicht mehr in Benutzung.

Folgende Module werden eingesetzt:
+ alexa
+ allowed
+ at
+ autocreate
+ BOTVAC
+ Calendar
+ CALVIEW
+ CUL
+ CUL_HM
+ DbLog
+ dewpoint
+ DLNARenderer
+ DOIF
+ DOIRools
+ dummy
+ FB_CALLMONITOR
+ FBAHA
+ FBDECT
+ FHEM2FHEM
+ FHEMWEB
+ FHT
+ FRITZBOX
+ fronthem
+ fronthemDevice
+ FS20
+ harmony
+ HMLAN
+ HMS
+ HTTPMOD
+ IPCAM
+ jawboneUp
+ MPD
+ NEUTRINO
+ notify
+ OPENWEATHER
+ Pushover
+ readingsGroup
+ structure
+ SVG
+ TelegramBot
+ VIERA
+ WINCONNECT
+ XBMC
+ YAMAHA_AVR

Wernieman

Zitat512MB RAM
Dann gib ihm mal mehr Speicher! Siehe Diskussion mit Rudi und mir (s.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

michael.winkler

Zitat von: Wernieman am 23 Juni 2017, 09:41:06
Dann gib ihm mal mehr Speicher! Siehe Diskussion mit Rudi und mir (s.o.)
Ok, das kann ich mal machen.

Gibt es eigentlich eine Grundsätzliche Empfehlung wie viel Hauptspeicher ein Standard FHEM Server haben sollte?

Wernieman

Siehe oben, es liegt nicht an fhem, sondern an den parallel laufenden Programmen.

WENN Du schon mit VM arbeitest, warum lagerst Du eigentlich alexa nicht in eine eigene aus?
Ob man homebringe auslagern könnte, bin ich überfragt.
- 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

michael.winkler

das es noch von anderen Programmen abhängt habe ich verstanden.

Des Wegen hatte ich ja auch nach einer Empfehlung für FHEM gefragt. Das viel RAM immer gut ist, ist auch klar.

Ich habe jetzt mal 1GB Ram zugeteilt, ich werde es jetzt mal beobachten.

danke für eure Hilfe.

Wernieman

FHEM läuft auch auf einem Pi mit 512. Es gibt keine Empfehlung, da es auch von der Art/Menge der verwendeten Module abhängt.
- 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

rudolfkoenig

Empfehlung ist schwer: es haengt von den eingesetzten Modulen, Anzahl der Geraete, was man damit macht, etc ab. Beispiele:
- manche Module achten auf Speicherverbrauch, andere weniger. Es findet diesbezueglich keine Kontrolle statt, nur wenn jemand sich beschwert, und der Autor Zeit und Musse hat es zu fixen.
- Jahresplots zu berechnen braucht mehr Speicher, als Tagesplots.
- Falls mehrere Plots auf einer Seite zu sehen sind, dann werden mehrere (bis zu 6) parallel berechnet
- die Leute wollen Features, z.Bsp. war CUL_HM mal 50k, inzwischen ist es bei 750k.

512MB fuer FHEM alleine sollte im Normalfall ausreichen.
In deinem Fall hat es ja auch nur fuer ein Drittel der Belegung gesorgt.

michael.winkler

Leider ist das Problem wieder da. Diese mal hat es nur länger gedauert, da wohl mehr Arbeitsspeicher zur Verfügung stand.

Anbei mal das Speicherergebnis

Last login: Fri Jun 23 22:35:55 2017 from hnmwwks01.home.int
root@HNMWFHEM01:~# ps -elf | sort -rnk 10 | head
1 S fhem      1920     1 14  80   0 - 206548 -     Jun23 ?        19:55:57 perl
4 S root      2420  2326  0  80   0 - 192202 -     Jun23 ?        00:01:49 homeb
0 S root      2059     1  0  80   0 - 187813 -     Jun23 ?        00:02:17 alexa
1 S fhem     28592  1920  0  80   0 - 180252 -     Jun28 ?        00:00:04 perl
4 S mysql     2803  2448  0  80   0 - 91021 -      Jun23 ?        00:04:10 /usr/                                                                                                                                                             ysqld/mysqld.sock --port=3306
5 S www-data  5228  2144  0  80   0 - 55815 -      Jun25 ?        00:00:00 /usr/
5 S www-data  3993  2144  0  80   0 - 55815 -      Jun25 ?        00:00:00 /usr/
5 S www-data  3991  2144  0  80   0 - 55815 -      Jun25 ?        00:00:00 /usr/
5 S www-data  3987  2144  0  80   0 - 55815 -      Jun25 ?        00:00:00 /usr/
5 S www-data  3983  2144  0  80   0 - 55815 -      Jun25 ?        00:00:00 /usr/


Gibt es eine Möglichkeit zu schauen welches Modul den meisten Speicher benötigt?

Wernieman

Ich kann Dir nur wieder raten, wenn Du schon mit VM arbeitest, dann richtig, d.h. eine VM = ein Dienst.
4 S root      2420  2326  0  80   0 - 192202 -     Jun23 ?        00:01:49 homeb
0 S root      2059     1  0  80   0 - 187813 -     Jun23 ?        00:02:17 alexa

Pache die einfach mal in eigene VMs ....
- 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