Symcon hängt sich auf, nur Dienstneustart hilft

HAllo zusammen,
ich habe ein echt doofes Problem,
in unregelmäßigen Abständen aber ca 2-3 mal die Woche hängt sich Symcon einfach auf.
Webfrontend und console sind nicht mehr zu erreichen.
Auch Scripte etc. laufen nicht mehr.
Also Symcon scheint tot zu sein.

Der Dienst läuft allerdings noch (läuft bei mir auf RPI).
Das einzige was Hilft ist ein manueller Dienstneustart über ssh.
Das ist natürlich doof.
Besonders wenn Mann unterwegs ist und Frau zu hause genrvt ist weil was nicht geht…
Wie kann man das analysieren?
Hat jemand ähnliche Probleme?
HILFE!!! wäre schon ziemlich wichtig.

Gruß
Suner

Gibt mehrere Möglichkeiten. Fürs erste könntest du mal ins Logfile schauen, ob es dort ein Muster gibt, wann der Absturz passiert. Oder ob dort irgendwelche Fehlermeldungen sind?

paresy

/var/log/ ??

Die Logs findest du in /var/log/symcon/

nix… das Logfile hört einfach irgendwann nachts auf und das neue fängt erst dann an, wenn ich den Dinest restarted habe…

letzte Zeilen des alten Logfiles:


0:35:24 | 39508 | DEBUG   | ScriptEngine         | Executing Script 39508 ~ Sender: RegisterVariable
00:35:24 | 44748 | DEBUG   | VariableManager      | [Lacrosse\Balkon_Lacrosse\ID] = 8
00:35:24 | 54294 | DEBUG  

alle anderen Logfiles haben andere Enden

keiner ne Idee??
ist echt ein doofer Zustand…

Was steckt denn hinter der ID 54294 ?

Batteriestatus Variable eine 434Mhz Temperatursensors…
Das ist aber Zufall… jedes Logfile endet mit irgendwas anderem wenn der Dienst streikt…

Magst du dir das mal ansehen? Debugging für Experten (Raspberry Pi, Linux)

Jedoch wird bei dir keine Exception passieren, sondern der Prozess stehen bleiben. Dann bitte CTRL+C drücken, um in der GDB Eingabeaufforderung zu landen und „info threads“ eintippen. Die Ausgabe (ggf mehrere Seiten) würde mich Interessieren. Ggf. klemmt bei dir etwas… !?

paresy

erledigt…
läuft…
mal gucken wann was passiert… ist ja nicht reproduzierbar…

wie mach ich denn das wenn ich die shell nicht die ganze zeit auf habe… kann man das sonst in ne Datei umleiten??

Jein. Google mal nach dem Tool screen :slight_smile:

paresy

ok fantastisch, sitze gerade in einem Linux-Kurs und habe jetzt Zeit und Know How sammeln können :smiley:
debugging über gdb läuft.
Screen kenne ich jetzt auch
ich warte auf den nächsten Crash und dann schauen wir mal :-D:-D

sooo… ich habe da mal was:

01:40:31 | 43287 | VariableManager | [Lacrosse\Keller_Sensor\Luftfeuchtigkeit] = 64.0000000000
01:40:31 | 19276 | VariableManager | [Lacrosse\Register Variable\Counter] = 0
01:40:31 | 39508 | ScriptEngine | Executed Script 39508 ~ Sender: RegisterVariable
01:40:32 | 39508 | ScriptEngine | Executing Script 39508 ~ Sender: RegisterVariable
01:40:32 | 46502 | VariableManager | [Lacrosse\Kühlschrank_Lacrosse\ID] = 27
01:40:32 | 26894 | VariableManager | [Lacrosse\Kühlschrank_Lacrosse\Batterie Klimasensor] = false
01:40:32 | 57437 | VariableManager | [Lacrosse\Kühlschrank_Lacrosse\Temperatur2] = -22.1000000000
01:40:32 | 19560 | VariableManager | [Lacrosse\Kühlschrank_Lacrosse\Luftfeuchtigkeit] = 999.0000000000
01:40:32 | 28821 | Serial Port | Applied settings
01:40:32 | 28821 | Serial Port | Closing port...

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x61bff430 (LWP 14054)]
0x0067dbec in boost::asio::detail::epoll_reactor::start_op(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*, bool, bool) ()

und das nach dem ich „bt“ eingegeben habe…
vll doch was mit dem seriellen POrt… :frowning: das wäre schade

#0  0x0067dbec in boost::asio::detail::epoll_reactor::start_op(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*, bool, bool) ()
#1  0x0068c3d8 in IOSerialPort::startWriting(std::shared_ptr<std::string>) ()
#2  0x0068e20c in boost::asio::detail::completion_handler<boost::_bi::bind_t<void, boost::_mfi::mf1<void, IOSerialPort, std::shared_ptr<std::string> >, boost::_bi::list2<boost::_bi::value<IOSerialPort*>, boost::_bi::value<std::shared_ptr<std::string> > > > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned int) ()
#3  0x00366620 in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
#4  0x006878a4 in std::thread::_Impl<std::_Bind_simple<IOSerialPort::Connect()::{lambda()#1} ()> >::_M_run() ()
#5  0x768e5348 in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Das verwundert mich etwas - dein Verhalten beschreibt ja eher einen Stillstand. Ein segfault ist aber ein Absturz, welcher den Prozess komplett verschwinden lässt. Magst du das Debugging einfach noch einmal starten?

paresy

Naja… das Ergebnis ist das gleiche wie bei einem Absturz… nur dass der Dienst halt noch auf „active“ steht…
Funktionen sind keine mehr da.

Aber das Debugging läuft noch mal

Hallo,

ich habe auch das Problem das sich Symcon seit der 4.3er einfach Aufhängt, zur Not wenn die Jungs es nicht hinbekommen kannst du ja den Watchdog hier nutzen:
https://www.symcon.de/forum/threads/36275-Symcon-Watchdog-f%C3%BCr-die-Nutzung-unter-Linux?highlight=watchdog

Dies ist eine Notlösung aber was soll man sonst machen wenn ein System das Seit zwei Jahren Stabil lief und nun seit dem Update auf die neue Version nicht mehr…

Hallo Paul,

vielen Dank für dein Feedback. Um das Problem finden zu können, sind wir leider auf eure Hilfe angewiesen, da dieses Problem bisher nicht auf unseren Systemen aufgetreten ist. Ich würde mich also freuen, wenn du uns ggf. auch mit einem Backtrace oder der Auflistung der laufenden Threads aushelfen könntest.

paresy

Hallo Paresy,

ich verwende folgende Hardware:

System 1: Raspi 3 mit Jessie und der letzten Symcon 4.3er Version dafür -->
Homematic über Yahm, MQTT über mosquitto am PI und Schnittstellen zu ETA SH20, Logitech Mediaserver, Harmony Hub, Unifi.

System 2: KVM Ubuntu 16.04 auch mit der letzten 4.3er Symcon Version -->
Siemens S7 (nur lesen) und MQTT über den mosquitto broker am selben Server sowie Unifi.

Hier Lese ich aus der S7 in sehr kurzen Abständen (200ms) Werte damit ich auch die Spitzen einigermaßen erfassen kann, da Siemens nichts besseres als Polling kann.

Das für mich Eigenartige ist das beide Systeme die keine Verbindung haben innerhalb weniger Wochen die selben Ausfall Erscheinungen hatten, vorher aber über ein Jahr ohne Funktionierten und die einzige Änderung war die neuere Version von Symcon.

Auch kann ich es nicht verstehen wie ihr solche Fehler nicht nachstellen könnt, wie auch beim exec Problem das durch die 4.3er aufgetreten aber nicht von euch gelöst wurde!

so… neuer Absturz

12:05:31 | 28821 | Serial Port | Applied settings
12:05:31 | 28821 | Serial Port | Closing port...

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x5dfff430 (LWP 12887)]
0x0067dbec in boost::asio::detail::epoll_reactor::start_op(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*, bool, bool) ()

(gdb) bt
#0  0x0067dbec in boost::asio::detail::epoll_reactor::start_op(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*, bool, bool) ()
#1  0x0068c3d8 in IOSerialPort::startWriting(std::shared_ptr<std::string>) ()
#2  0x0068e20c in boost::asio::detail::completion_handler<boost::_bi::bind_t<void, boost::_mfi::mf1<void, IOSerialPort, std::shared_ptr<std::string> >, boost::_bi::list2<boost::_bi::value<IOSerialPort*>, boost::_bi::value<std::shared_ptr<std::string> > > > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned int) ()
#3  0x00366620 in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
#4  0x006878a4 in std::thread::_Impl<std::_Bind_simple<IOSerialPort::Connect()::{lambda()#1} ()> >::_M_run() ()
#5  0x768e5348 in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)