Support-Forum

Lösungsvorschlag langsame Trutzbox nach einem Monat

Probleme oder Fragen zur Installation und Registrierung.
Hallo liebes Team von der Trutzbox,

nun habe ich mein Exemplar seit ca. 3Monaten in Betrieb und bin insgesamt sehr zufrieden.
Was mir in der Zeit aufgefallen ist, ist daß die Trutzbox nach ca. 4 Wochen uptime unerträglich langsam wird.
Eine Analyse auf der Box hat gezeigt, dass der nodejs Prozess ueber 50 Prozent des Arbeitsspeichers benutzt und der Kernel versucht per kswap0d dies mit einem Auslagern in den Swap Bereich auszugleichen.
Der kswap0d Prozess läuft wiederum mit 100%CPU Last auf einem Prozessor und kann seine Aufgabe nicht erfüllen da kein Swap Speicher konfiguriert ist.

Der Lösungsansatz für meine Installation besteht nun darin dem Kernel das Auslagern per 'sysctl vm.swappiness=0' Kommando zu untersagen. Der Wert steht per Default auf 60.
Siehe dazu: https://help.ubuntu.com/community/SwapF ... ange_it.3F

Für die Zukunft würde ich mir wünschen, dass ihr den Speicherhunger des in Javascript geschriebenen NodeJs Prozesse in den Griff zu bekommen.
Alternativ könnt ihr darüber diskutieren, ob swappiness=0 eine Lösung darstellt.

Ich möchte hier keine Diskussion anfangen, ob die Wahl eines NodeJs Servers für ein Embedded System überhaupt die richtige Wahl war. Aus meine Sicht nicht. Denn bei begrenzten Resourcen sollte man auf Server in Skriptsprachen oder auch in Java entwickelten Anwendungen verzichten. Aber das Kind ist bereits in den Brunnen gefallen.

Ich bin gespannt was ihr daraus macht. Bitte bleibt am Ball. Die Box an sich ist ganz prima.

Gruß
tetrok
Die Beobachtung, dass die Trutzbox nach einigen Wochen sehr langsam wird habe ich auch schon längst gemacht. Daher starte ich die Trutzbox alle paar Wochen neu. Jedoch funktioniert dies seit dem letzten Update nicht mehr reibungslos. Nach einem Reboot ist das WLAN nicht mehr aktiviert. Wenn ich die Trutzbox herunterfahre und durch Trennung und Verbindung mit dem Netzteil wieder hoch fahre, ist das WALN Modul jedoch aktiv. Alternativ kann ich es nach einem Reboot über die GUI aktivieren, wenn ich mich Ethernet mit der Trutzbox verbinde. Das ist lästig und relativ zeitaufwändig (lange Boot-Zeiten).

Nun war meine Trotzbox gar so langsam geworden, dass die GUI gar nicht zu verwenden war und ich mich via ssh am System anmelden musste. Aber auch das war äußerst zäh und ich dachte, das System würde überhaupt nicht mehr reagiere. Daher schaute ich hier im Forum nach, ob jemand ähnliche Beobachtungen gemacht hat, fand diesen Thread und viewtopic.php?f=3&t=332.

Für das WLAN hatte ich folgendes Modul von Comidio erworben: Qualcomm Atheros: AR928X Wireless Network Adapter (PCI-Express).

Nun werde ich oben beschriebenes Verfahren testen, um mir das lästige und nich reibungslos funktionierende Reboot zu ersparen. Außerdem erhoffe ich eine Lösung der von mir früher beschriebenen Verbindungsprobleme des folgenden Thread: viewtopic.php?f=8&t=239&p=1021#p1021

Die Trutzbox habe seit einem Jahr in Betrieb. Meinen alten Access Point habe ich immer noch, da ich mich nicht zu 100% auf die Trutzbox für einen Internetzugang verlassen kann. Die Trutzbox möchte ich nicht missen, wird aber entgegen meiner ursprünglichen Planung bei mir "nur" zusätzlich betrieben.
Der memory-leak ist ursächlich im node.js-Server und nicht in unserem Code. Somit ist dieser schwierig zu beheben und wir hoffen, dass sich das Problem mit einer zukünftigen node.js Version automatisch löst. Aus diesem Grund läuft auf der TrutzBox ein Watchdog, der jede Nacht, wenn der Proxy gerade idle ist, neu startet.
Normalerweise wird dadurch verhindert, dass der Proxy so gross anwächst, dass es zum swapen kommt. Wir können auf unserer Seite bisher auch nicht beobachten, dass eine TrutzBox bei längerem Betrieb nach mehreren Tagen sehr langsam wird.

Es könnte allerdings sein, dass Geräte, die im Transparentmode an der TrutzBox angeschlossen sind, permanent Daten austauschen und dadurch der Proxy nie zur Ruhe kommt. Dann würde auch der neu-start des Proxies nie ausgeführt werden.

Mit dem Befehl "sudo service comidio-trutzbox-node restart" können Sie auf Shell-Ebene die node.js Prozesse neu starten. Das ist zumindest besser, als die TrutzBox neu zu starten oder das Swapen zu verhindern. Sie könnten mal als work-around versuchen, ob in Ihrem Fall das Problem gelöst wird, wenn Sie den node.js restart per cron-job automatisch regelmässig erzwingen.

Wir werden uns des Themas memory-leak und auch das Problem mit "WLAN kommt nicht hoch" noch mal genauer anschauen.

Ihr Comidio Support
Hallo liebes Team von der Trutzbox,

die swappiness habe ich wieder auf 60 gesetzt. Außerdem bin Ihrem Vorschlag gefolgt und habe einen cron-job eingerichtet.

Schöne Grüße,
trutzbox
Der regelmäßige Neustart des node.js Servers hat schon etwas geholfen. Zumindest möchte das Linux nicht mehr swappen.
Dennoch ist die Box teilweise sehr langsam und stört das 'Surfgefühl' spürbar.
Ich bin mal die Logfiles unter '/var/log/comidio' durchgegangen und habe eine paar auffällige Einträge ausfindig gemacht.
Vielleicht haben die etwas mit der Performance zu tun. Evtl. starten sich hier Prozesse neu, bevor die Anfragen eines Browsers beantwortet werden können.

webServer.log

Code: Alles auswählen

2017-11-08T14:37:21.360Z - error: Caught unexpected exception Error: not opened Error: not opened
    at WebSocket.send (/usr/lib/comidio/trutzbox-node/node_modules/ws/lib/WebSocket.js:219:16)
    at /usr/lib/comidio/trutzbox-node/lib/webServer.js:292:29
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/lib/util.js:406:13)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/lib/util.js:47:18)
    at Request._callback (/usr/lib/comidio/trutzbox-node/node_modules/fg-lodash/node_modules/lodash/dist/lodash.js:5605:23)
    at Request.requestRetryReply [as reply] (/usr/lib/comidio/trutzbox-node/node_modules/requestretry/index.js:78:19)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/requestretry/index.js:106:10)
    at Request.self.callback (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:187:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:1044:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:965:12)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:926:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9) in webServer. Load [0.2041015625,0.1279296875,0.09716796875], Free memory 266739712 Uptime 1368999

trutzbox-node.log

Code: Alles auswählen

info: Starting version  0.2.113
info: Will use token  ab244b9810a5b122
info: Starting child processes...
info: Done starting child processes
(node:29119) DeprecationWarning: process.EventEmitter is deprecated. Use require('events') instead.
error: Unable to connect server, trying again...
info: socket.io started
(node:29108) DeprecationWarning: process.EventEmitter is deprecated. Use require('events') instead.
Will use token ab244b9810a5b122
Will use token ab244b9810a5b122
Will use token ab244b9810a5b122
/usr/lib/comidio/trutzbox-node/node_modules/log.io/lib/harvester.js:90
            _this._readNewLogs(path, stat.size, currSize);
                                         ^

TypeError: Cannot read property 'size' of undefined
    at /usr/lib/comidio/trutzbox-node/node_modules/log.io/lib/harvester.js:90:42
    at FSReqWrap.oncomplete (fs.js:117:15)
warn: Forever detected logIoHarvester exited with code 1
warn: Forever restarting logIoHarvester for 1 time
error: Lost TCP connection...
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
(node:30356) DeprecationWarning: process.EventEmitter is deprecated. Use require('events') instead.
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: File doesn't exist: '/var/log/comidio/proxyServer.log'
error: Lost TCP connection...
error: Lost TCP connection...
error: Unable to connect server, trying again...
error: Lost TCP connection...
error: Lost TCP connection...
error: Unable to connect server, trying again...
dovecot is running.
postfix is running.

Zusätzlich finde ich jede Menge Einträge dieser Art:
proxyServer.log

Code: Alles auswählen

proxyServer.log:2017-11-10T10:40:40.009Z - error: IPC communication failed for {"url":"http://localhost:9999/ipc/getSSLCertificate","qs":{"domain":"comidio.de"},"retryDelay":500,"maxAttempts":5,"fullResponse":true} Do Retry: true Error:{"code":"ECONNRESET","errno":"ECONNRESET","syscall":"read"}
Besten Gruß
tetrok
Noch eine Ergänzung zu meinem letzten Beitrag:

aus dem linux kernel log

Code: Alles auswählen

[146068.434096] TCP: out of memory -- consider tuning tcp_mem
[146068.440395] TCP: out of memory -- consider tuning tcp_mem
[146068.447242] TCP: out of memory -- consider tuning tcp_mem
[146068.476602] TCP: out of memory -- consider tuning tcp_mem
[146068.655243] TCP: out of memory -- consider tuning tcp_mem
[146075.732673] TCP: out of memory -- consider tuning tcp_mem
[146076.125474] TCP: out of memory -- consider tuning tcp_mem
[146076.132752] TCP: out of memory -- consider tuning tcp_mem
...
Die Hardware ist einfach zu beschränkt!
Gruß
tetrok
Nun konnte ich eine weitere Ursache finden.
Die Twitter App meines Android Tablets baut immer wieder Verbindungen auf und bricht diese anschließend ab.

Der NodeJS Server der Trutzbox lässt die Sockets jedoch auf unbestimmte Zeit geöffen.

Code: Alles auswählen

# netstat -tnp |grep FIN_WAIT | wc
zeigt mir hier ca.450 Sockets im State FIN_WAIT2.
Diese Kombination sammelt so viele offene Sockets, dass der Linux Kernel irgendwann keinen Arbeitsspeicher mehr dafür hat.
Erst eine Neustart des NodeJS Servers schafft hier Abhilfe.

Meiner Meinung nach liegt der Fehler in der NodeJS Implementierung. Hier muss darauf geachtet werden, daß der Client die Verbindung abgebrochen hat und die Ressource muss wieder freigegeben werden.
Die Trutzbox muss sich vor dem Verhalten der Twitter App schützen.

Wer ein watch vor den obigen Aufruf hinzufügt kann live beobachten wie die Zahl der sockets steigt.

Code: Alles auswählen

# watch 'netstat -tnp |grep FIN_WAIT | wc'
Every 2,0s: netstat -tnp |grep WAIT|wc
		18     126    1746

Gruß
tetrok
Hallo tetrok, vielen Dank für den Hinweis. Wir werden das untersuchen.

Ihr Comidio Support
comidio support hat geschrieben:
Sa 11. Nov 2017, 14:24
Hallo tetrok, vielen Dank für den Hinweis. Wir werden das untersuchen.

Ihr Comidio Support
Hallo Comidio Support,
danke fuers weiterreichen.
Gibt es hier schon Erkenntnisse dazu?
Seit dem letzten Update: Version: 0.2.122 2017-11-13
haben sich die Symptome verschlimmert.
Im User Interface der Trutzbox sehe ich immer öfter diese Meldung auf Session Status Seite einer konkreten Verbindung:

Code: Alles auswählen

TrutzBox Sicherheitseinstellungen 2 ERROR https://download.mozilla.org
Es war ein unerwarteter Fehler aufgetreten:
Error: connect ECONNREFUSED 127.0.0.1:9999
Und in /var/log/comidio/webServer.log sammeln sich diese Meldungen:

Code: Alles auswählen

2017-11-18T17:32:43.118Z - info: Is first boot: false
2017-11-18T17:36:03.043Z - error: Caught unexpected exception TypeError: Cannot read property 'length' of undefined TypeError: Cannot read property 'length' of undefined
    at hashCode (/usr/lib/comidio/trutzbox-node/lib/router/proxy.js:977:33)
    at /usr/lib/comidio/trutzbox-node/lib/router/proxy.js:982:26
    at /usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:486:20
    at processQueue (/usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:1608:24)
    at taskComplete (/usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:1630:13)
    at /usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:1653:21
    at /usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:339:31
    at /usr/lib/comidio/trutzbox-node/node_modules/async/dist/async.js:847:20
    at /usr/lib/comidio/trutzbox-node/lib/router/proxy.js:967:25
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/lib/util.js:406:13)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/lib/util.js:47:18)
    at Request._callback (/usr/lib/comidio/trutzbox-node/node_modules/fg-lodash/node_modules/lodash/dist/lodash.js:5605:23)
    at Request.requestRetryReply [as reply] (/usr/lib/comidio/trutzbox-node/node_modules/requestretry/index.js:78:19)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/requestretry/index.js:106:10)
    at Request.self.callback (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:187:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:1044:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (/usr/lib/comidio/trutzbox-node/node_modules/request/request.js:965:12)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:926:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9) in webServer. Load [0.0615234375,0.2158203125,0.17578125], Free memory 546078720 Uptime 4364
2017-11-18T17:36:03.295Z - error: Error reported  id=f6506429eb8749e692332338c9ff06e6
2017-11-18T17:36:05.345Z - info: Starting webServer Version 0.2.122
2017-11-18T17:36:07.912Z - info: Current language is de
2017-11-18T17:36:09.095Z - info: Starting WSS server
2017-11-18T17:36:09.117Z - info: Started HTTP webserver on  9999
2017-11-18T19:13:45.609Z - info: Starting webServer Version 0.2.122
2017-11-18T19:13:48.329Z - info: Current language is de
2017-11-18T19:13:49.480Z - info: Starting WSS server
2017-11-18T19:13:49.501Z - info: Started HTTP webserver on  9999
Desweiteren fehlt mir das Trutzbox Symbol um den Slider der Trutzbox fuer die aktuelle Verbindung direkt aus dem Browser heraus zu konfigurieren.

Was kann ich tun, damit der node-js Server nicht ich immer wieder auf die Bretter geht?

Gruss
tetrok
Bzgl. der unreleased Sockets konnten wir aus Prioritäts-Gründen noch nicht rein schauen. Aber aufgrund Ihrer guten Vorarbeit, wird es uns die Analyse stark erleichtern. Vielen Dank dafür.
Können Sie uns noch mitteilen, welche Twitter-App auf welchem Device bei Ihnen die vielen Verbindungen aufbaut? Dann können wir es direkt damit testen.

In der aktuellen Proxy-Version gibt es seit dem letzten Update ein Problem mit den Log-Files. Es werden zu viele und teilweise auch falsche Logs geschrieben. Das belastet das System unnötiger Weise. Wir haben gerade ein neues Release in der Test-Phase das dieses Problem behebt und werden das Release kurzfristig ausrollen.

In diesem Release wird auch ein Problem, dass gelegentlich die TrutzBurg im Browser nicht angezeigt wird, behoben sein. Bitte beachten Sie jedoch, dass es immer Fälle gibt, bei dem die TrutzBurg nicht im Browser angezeigt werden kann. Die Fälle sind hier im Handbuch beschrieben:
https://wiki.trutzbox.de/view/TrutzBox_ ... gt_wird.3F

Sie können des SecLevel einer Web-Seite immer auch im TrutzBox-User-Interface unter "TrutzBox Filter" -> "Filter-Konfigurieren" -> "Slider Einstellungen" sehen und anpassen.

Ihr Comidio Support