Open Subnum12 opened 4 years ago
Spontan: keine Ahnung. Möglicherweise entsteht der erhöhte Speicherbedarf bei File Storage daraus dass der Context dann nach JSON serialisiert werden muss. Dein Context scheint recht "riesig" zu sein, vielleicht wäre er hier besser die Daten anderswo (SQLite oder externe DB, Redis o.Ä.) abzulegen. Was hältst Du denn so für Daten im Context?
Habe festgestellt es betrifft primär einen Baustein Dieser protokolliert wohl intern Daten (ohne das das konfigurierbar wäre oder dokumentiert ist).
Wie auch immer, anscheinend werden die Daten im RAM wohl wesentlich effizienter gespeichert als das nach dem serialisieren nach JSON der Fall ist.
Beispiel (tatsächlich ist das File mit allen logs >200MB):
{
"values": {
"currentTemp": 22.88,
"targetValue": 22,
"isUserCustom": true,
"currentSchedule": {
"temp": 19,
"day": "Thursday",
"time": "16:30"
},
"nextSchedule": {
"temp": 19,
"day": "Thursday",
"time": "23:59"
},
"currentHeaterStatus": "off",
"userTargetValue": 22,
"time": "3/5/2020, 8:31:48 PM"
},
"logs": [
{
"currentTemp": 22.88,
"targetValue": 15,
"isUserCustom": true,
"currentSchedule": {
"temp": 19,
"day": "Thursday",
"time": "16:30"
},
"nextSchedule": {
"temp": 19,
"day": "Thursday",
"time": "23:59"
},
"currentHeaterStatus": "off",
"userTargetValue": 15,
"time": "3/5/2020, 8:31:44 PM"
},
{
"currentTemp": 22.88,
"targetValue": 22,
"isUserCustom": true,
"currentSchedule": {
"temp": 19,
"day": "Thursday",
"time": "16:30"
},
"nextSchedule": {
"temp": 19,
"day": "Thursday",
"time": "23:59"
},
"currentHeaterStatus": "off",
"userTargetValue": 22,
"time": "3/5/2020, 8:31:48 PM"
}
]
}
Da würde ich vorschlagen mal ein Issue bei node-red-contrib-heater-controller aufzumachen. Aus meiner Sicht ist es nicht wirklich akzeptabel dass Nodes den Context mit solchen Datenmengen befüllen und soviel RAM belegen.
ja klar, das ist dort auch bereits behoben...
Dennoch zeigt das ein Problem mit dem File Storage auf, denn im RAM führt das nicht zum crash sondern die Daten werden beschränkt. Das ist beim speichern im File Storage wohl nicht der Fall, bzw. aufgrund der größeren Ressourcennutzung wenn die Daten nach JSON serialisiert werden reicht die Beschränkung die im RAM passiert nicht aus.
denn im RAM führt das nicht zum crash sondern die Daten werden beschränkt.
Mir ist keine Beschränkung der Context-Größe bekannt, woher nimmst Du diese Info? Am besten mal im Node-RED Discourse/Slack/Issuetracker nachfragen.
Wenn Context Storage auf memory gesetzt ist läuft alles bestes:
Wenn Context Storage auf file gesetzt ist:
![grafik](https://user-images.githubusercontent.com/33807364/76011611-2781ee80-5f15-11ea-9f70-8bb01ee9dd87.png)
anbei der Log:
Eigentlich sollte das keinen Unterschied machen wo die Daten liegen (memory/file). Anscheinend werden jedoch von Bausteinen teilweise erheblich mehr Daten im Filesystem gespeichert als im RAM. Das sollte zumindest insofern konfigurierbar sein, dass es nicht zum "heap out of memory" führt.
Hat #324 villeicht was zu tun?