Ankündigung

Einklappen
Keine Ankündigung bisher.

smarthome.py stürzt ab

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    smarthome.py stürzt ab

    Nachdem ich unter 0.8 immer wieder Probleme damit hatte, dass sich sh.py wegen zu vielen Worker Threads aufhing, hat sich heute früh die 0.9er-Version kommentarlos in den Urlaub verabschiedet (python nicht mehr in der Taskliste). Ich habe keine rechte Ahnung, woran es liegt. Ich tippe darauf, dass eine meiner Logiken nicht das tut, was sie soll - aber Endlos-Loops o.ä. kann ich keine erkennen.
    Eigene Patches (die in der 0.8er noch drinwaren) sind alle rausgeflogen (Ausnahme Ende des KNX-Plugins, wo ich die Filterung wieder eingebaut habe).

    Hardware ist ein Beaglebone mit Debian und Python 2.7.3.

    items.conf, plugin.conf, gepatchtes KNX-Plugin und Logfile anbei.

    Mir fehlt leider die Phantasie, wo ich zu suchen anfangen soll. Ich würde erst mal bei der Erzeugung der Worker Threads schauen, tue mich aber in Marcus' kommentarfreiem Code ziemlich schwer. Ich bastle auch gerne noch mehr Logging rein.

    [Nachtrag]
    Ich habe noch in die syslog.conf reingesehen. Oh shit. Der oom_killer hat zugeschlagen.
    Code:
    Aug  4 06:01:39 hausmeister kernel: [6852631.192404] nmbd invoked oom-killer: gfp_mask=0xd0, order=2, oom_adj=0, oom_score_adj=0
    Aug  4 06:01:39 hausmeister kernel: [6852631.201093] nmbd cpuset=/ mems_allowed=0
    Aug  4 06:01:39 hausmeister kernel: [6852631.205362] Backtrace: 
    Aug  4 06:01:39 hausmeister kernel: [6852631.208143] [<c00108e0>] (dump_backtrace+0x0/0x110) from [<c04ea9a4>] (dump_stack+0x18/0x1c)
    Aug  4 06:01:39 hausmeister kernel: [6852631.217150]  r6:cfbf6800 r5:00000000 r4:cfb0a000 r3:c070d270
    Aug  4 06:01:39 hausmeister kernel: [6852631.223301] [<c04ea98c>] (dump_stack+0x0/0x1c) from [<c008c578>] (dump_header.isra.12+0x6c/0x14c)
    Aug  4 06:01:39 hausmeister kernel: [6852631.232773] [<c008c50c>] (dump_header.isra.12+0x0/0x14c) from [<c008c7cc>] (oom_kill_process+0x48/0x204)
    Aug  4 06:01:39 hausmeister kernel: [6852631.242857]  r7:000000d0 r6:00000002 r5:00000353 r4:cfbf6800
    Aug  4 06:01:39 hausmeister kernel: [6852631.248977] [<c008c784>] (oom_kill_process+0x0/0x204) from [<c008ce00>] (out_of_memory+0x134/0x1c0)
    Aug  4 06:01:39 hausmeister kernel: [6852631.258625] [<c008cccc>] (out_of_memory+0x0/0x1c0) from [<c008fa80>] (__alloc_pages_nodemask+0x590/0x6d8)
    Aug  4 06:01:39 hausmeister kernel: [6852631.268806]  r8:00000040 r7:00000002 r6:00000000 r5:cfb0a000 r4:000000d0
    Aug  4 06:01:39 hausmeister kernel: [6852631.276031] [<c008f4f0>] (__alloc_pages_nodemask+0x0/0x6d8) from [<c008fbe0>] (__get_free_pages+0x18/0x54)
    Aug  4 06:01:39 hausmeister kernel: [6852631.286336] [<c008fbc8>] (__get_free_pages+0x0/0x54) from [<c0014ae8>] (pgd_alloc+0x1c/0xe0)
    Aug  4 06:01:39 hausmeister kernel: [6852631.295359] [<c0014acc>] (pgd_alloc+0x0/0xe0) from [<c0036b90>] (mm_init+0xa4/0xe4)
    Aug  4 06:01:39 hausmeister kernel: [6852631.303552]  r7:c1637680 r6:00000000 r5:c153a400 r4:cfa7d840
    Aug  4 06:01:39 hausmeister kernel: [6852631.309666] [<c0036aec>] (mm_init+0x0/0xe4) from [<c00370a4>] (dup_mm+0x70/0x3bc)
    Aug  4 06:01:39 hausmeister kernel: [6852631.317670]  r6:c153a400 r5:c0734940 r4:cfa7d840 r3:00000000
    Aug  4 06:01:39 hausmeister kernel: [6852631.323799] [<c0037034>] (dup_mm+0x0/0x3bc) from [<c0037b44>] (copy_process+0x70c/0xe14)
    Aug  4 06:01:39 hausmeister kernel: [6852631.332448] [<c0037438>] (copy_process+0x0/0xe14) from [<c0038378>] (do_fork+0xe4/0x234)
    Aug  4 06:01:39 hausmeister kernel: [6852631.341101] [<c0038294>] (do_fork+0x0/0x234) from [<c00105a0>] (sys_clone+0x34/0x3c)
    Aug  4 06:01:39 hausmeister kernel: [6852631.349368] [<c001056c>] (sys_clone+0x0/0x3c) from [<c000d5a0>] (ret_fast_syscall+0x0/0x30)
    Aug  4 06:01:39 hausmeister kernel: [6852631.358280] Mem-info:
    Aug  4 06:01:39 hausmeister kernel: [6852631.360843] Normal per-cpu:
    Aug  4 06:01:39 hausmeister kernel: [6852631.363939] CPU    0: hi:   90, btch:  15 usd:   4
    Aug  4 06:01:39 hausmeister kernel: [6852631.369129] active_anon:58514 inactive_anon:308 isolated_anon:0
    Aug  4 06:01:39 hausmeister kernel: [6852631.369138]  active_file:46 inactive_file:91 isolated_file:0
    Aug  4 06:01:39 hausmeister kernel: [6852631.369147]  unevictable:0 dirty:0 writeback:0 unstable:0
    Aug  4 06:01:39 hausmeister kernel: [6852631.369156]  free:1220 slab_reclaimable:586 slab_unreclaimable:1091
    Aug  4 06:01:39 hausmeister kernel: [6852631.369166]  mapped:55 shmem:390 pagetables:319 bounce:0
    Aug  4 06:01:39 hausmeister kernel: [6852631.399846] Normal free:4880kB min:2036kB low:2544kB high:3052kB active_anon:234056kB inactive_anon:1232kB 
    active_file:184kB inactive_file:364kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:260096kB mlocked:0kB dirty:0kB writeback:0kB map
    ped:220kB shmem:1560kB slab_reclaimable:2344kB slab_unreclaimable:4364kB kernel_stack:1296kB pagetables:1276kB unstable:0kB bounce:0kB writeback_tmp
    :0kB pages_scanned:3459 all_unreclaimable? yes
    Aug  4 06:01:39 hausmeister kernel: [6852631.441188] lowmem_reserve[]: 0 0
    Aug  4 06:01:39 hausmeister kernel: [6852631.444841] Normal: 686*4kB 217*8kB 21*16kB 2*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096k
    B = 4880kB
    Aug  4 06:01:39 hausmeister kernel: [6852631.456166] 539 total pagecache pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.460164] 0 pages in swap cache
    Aug  4 06:01:39 hausmeister kernel: [6852631.463822] Swap cache stats: add 0, delete 0, find 0/0
    Aug  4 06:01:39 hausmeister kernel: [6852631.469452] Free swap  = 0kB
    Aug  4 06:01:39 hausmeister kernel: [6852631.472651] Total swap = 0kB
    Aug  4 06:01:39 hausmeister kernel: [6852631.487480] 65536 pages of RAM
    Aug  4 06:01:39 hausmeister kernel: [6852631.490902] 1479 free pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.493996] 2676 reserved pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.497449] 1677 slab pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.500538] 893 pages shared
    Aug  4 06:01:39 hausmeister kernel: [6852631.490902] 1479 free pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.493996] 2676 reserved pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.497449] 1677 slab pages
    Aug  4 06:01:39 hausmeister kernel: [6852631.500538] 893 pages shared
    Aug  4 06:01:39 hausmeister kernel: [6852631.503742] 0 pages swap cached
    Aug  4 06:01:39 hausmeister kernel: [6852631.507222] [ pid ]   uid  tgid total_vm      rss cpu oom_adj oom_score_adj name
    Aug  4 06:01:39 hausmeister kernel: [6852631.515192] [  270]     0   270      608      146   0     -17         -1000 udevd
    Aug  4 06:01:39 hausmeister kernel: [6852631.523223] [ 1460]     0  1460     1246      429   0       0             0 dhclient
    Aug  4 06:01:39 hausmeister kernel: [6852631.531512] [ 1742]     0  1742     7131      364   0       0             0 rsyslogd
    Aug  4 06:01:39 hausmeister kernel: [6852631.539774] [ 1767]     0  1767     2468      135   0       0             0 nmbd
    Aug  4 06:01:39 hausmeister kernel: [6852631.547692] [ 1769]     0  1769     2192      111   0       0             0 nmbd
    Aug  4 06:01:39 hausmeister kernel: [6852631.555611] [ 1789]     0  1789     4114      199   0       0             0 smbd
    Aug  4 06:01:39 hausmeister kernel: [6852631.563530] [ 1805]     0  1805     4243      171   0       0             0 smbd
    Aug  4 06:01:39 hausmeister kernel: [6852631.571447] [ 1848]     0  1848      980       46   0       0             0 cron
    Aug  4 06:01:39 hausmeister kernel: [6852631.579349] [ 1877]   101  1877      644       74   0       0             0 dbus-daemon
    Aug  4 06:01:39 hausmeister kernel: [6852631.587910] [ 2021]     0  2021     4757       74   0       0             0 owhttpd
    Aug  4 06:01:39 hausmeister kernel: [6852631.596109] [ 2030]     0  2030    10899      130   0       0             0 owserver
    Aug  4 06:01:39 hausmeister kernel: [6852631.604395] [ 2106]     0  2106     1518      105   0     -17         -1000 sshd
    Aug  4 06:01:39 hausmeister kernel: [6852631.612318] [ 2142]     0  2142     3550      156   0       0             0 winbindd
    Aug  4 06:01:39 hausmeister kernel: [6852631.620597] [ 2150]     0  2150     3550      142   0       0             0 winbindd
    Aug  4 06:01:39 hausmeister kernel: [6852631.628878] [ 2167]     0  2167      407       17   0       0             0 xplhub
    Aug  4 06:01:39 hausmeister kernel: [6852631.636977] [ 2170]     0  2170      457       24   0       0             0 xplhub
    Aug  4 06:01:39 hausmeister kernel: [6852631.645080] [ 2223]   103  2223     1167      111   0       0             0 ntpd
    Aug  4 06:01:39 hausmeister kernel: [6852631.652996] [ 2276]     0  2276      413       31   0       0             0 getty
    Aug  4 06:01:39 hausmeister kernel: [6852631.661004] [ 6944]     0  6944     6597      289   0       0             0 console-kit-dae
    Aug  4 06:01:39 hausmeister kernel: [6852631.669907] [ 7011]     0  7011     5573      123   0       0             0 polkitd
    Aug  4 06:01:39 hausmeister kernel: [6852631.678102] [14614]     0 14614     3550      141   0       0             0 winbindd
    Aug  4 06:01:39 hausmeister kernel: [6852631.686382] [14615]     0 14615     3550      153   0       0             0 winbindd
    Aug  4 06:01:39 hausmeister kernel: [6852631.694666] [ 2632]     0  2632      371       20   0       0             0 tail
    Aug  4 06:01:39 hausmeister kernel: [6852631.702606] [ 2633]     0  2633      370       19   0       0             0 tail
    Aug  4 06:01:39 hausmeister kernel: [6852631.710509] [ 9028]     0  9028      607      153   0     -17         -1000 udevd
    Aug  4 06:01:39 hausmeister kernel: [6852631.718523] [ 9029]     0  9029      607      147   0     -17         -1000 udevd
    Aug  4 06:01:39 hausmeister kernel: [6852631.726529] [17206]    33 17206     1702      438   0       0             0 lighttpd
    Aug  4 06:01:39 hausmeister kernel: [6852631.734815] [11106]     0 11106      883       65   0       0             0 eibd
    Aug  4 06:01:39 hausmeister kernel: [6852631.742737] [27929]     0 27929    97904    55260   0       0             0 python
    Aug  4 06:01:39 hausmeister kernel: [6852631.750840] Out of memory: Kill process 27929 (python) score 851 or sacrifice child
    Aug  4 06:01:39 hausmeister kernel: [6852631.759031] Killed process 27929 (python) total-vm:391616kB, anon-rss:221004kB, file-rss:36kB
    Irgendetwas in sh.py frisst hier Speicher ohne Ende; wenn ich das Logfile richtig interpretiere, rund 100 MB RAM. Das ist natürlich weniger toll. Wahrscheinlich spinnt irgendeine meiner Logiken. Lässt sich irgendwo anzeigen, welche Logiken gerade aktiv sind bzw. welcher Worker Thread gerade was tut?

    Ich bringe jetzt erst mal monit ans Laufen. Merde alors.

    Gruß,

    Max
    Angehängte Dateien

    #2
    smarthome.py stürzt ab

    verwendest du irgendwo urllib? die hat ein Memoryleak, weshalb Marcus in den tools eine Funktion für http Abfragen 'fetch_url' eingebaut hat.
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #3
      Hallo Max,

      ich denke auch es liegt an urllib(2). Das ist echt kaputt.
      Selbst meine Wrapper-Funktion sh.tools.fetch_url('https://www.regular.com')
      mildert nur das Leak stark ab.
      Ich bin auf der Suche nach einer Alternative. Auch wenn es bedeutet einen zusätzliche Abhängigkeit einzubauen. :-(

      Bis bald

      Marcus

      Kommentar


        #4
        Ich hatte das zuerst so gemacht, bevor Du sh.tools.fetch_url() ins Spiel gebracht hast.


        Code:
        import httplib
        
        HTTPcon = httplib.HTTPConnection(serverName)
        HTTPcon.request('GET', searchURL)
        response = HTTPcon.getresponse()
                
        if not response.status == 200:
            print 'Error in HTTP request', response.status
            HTTPcon.close()
            return False
            
        content = response.read()
        KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

        Kommentar


          #5
          Hi Jan,

          sieht auf den ersten Blick (Speicherverbrauch) gut aus. Ich behalte das weiter im Auge und teste das.

          Danke und bis bald

          Marcus

          Kommentar


            #6
            Zitat von 2ndsky Beitrag anzeigen
            verwendest du irgendwo urllib? die hat ein Memoryleak, weshalb Marcus in den tools eine Funktion für http Abfragen 'fetch_url' eingebaut hat.
            Nein, das ist es nicht. Ich habe eher den Verdacht, dass eine Logik nicht sauber terminiert und dann x-mal parallel läuft.
            Gibt es eine Möglichkeit, zu sehen, welche Logiken aktuell aktiv sind?

            Max

            Kommentar


              #7
              Hallo Max,

              Zitat von l0wside Beitrag anzeigen
              Gibt es eine Möglichkeit, zu sehen, welche Logiken aktuell aktiv sind?
              nicht direkt. Siehe aber https://knx-user-forum.de/smarthome-...eobachten.html

              Die dort beschriebene Logik gibt die Namen der aktiven Threads, und damit die Logiken, aus.

              hth

              Marcus

              P.S. wahrscheinlich baue ich das noch in das CLI ein, um das einfach zu checken.

              Kommentar


                #8
                Hallo Marcus,

                danke. Ich baue es dieser Tage mal ein und werde berichten.

                Gruß,

                Max

                Kommentar


                  #9
                  Hi Max,

                  das CLI Plugin im develop branch kann nun 'lt', das listet die Threads auf.

                  Weiterhin habe ich ein Memory Leak bei der Websocket-Schnittstelle gefunden und gefixed. Die Auswirkungen (Speicherersparniss) und den Fix muss ich aber noch testen bevor ich es einchecke.

                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Zitat von mknx Beitrag anzeigen
                    das CLI Plugin im develop branch kann nun 'lt', das listet die Threads auf.

                    Weiterhin habe ich ein Memory Leak bei der Websocket-Schnittstelle gefunden und gefixed. Die Auswirkungen (Speicherersparniss) und den Fix muss ich aber noch testen bevor ich es einchecke.
                    Hallo Marcus,

                    merci, ich bin immer wieder von deinem Entwicklungstempo beeindruckt!

                    Ich baue das cli aus dem git mal ein. Websocket wäre eine mögliche Quelle für Speicherprobleme; ich habe eine (von Will inspirierte) handgestrickte Visu am Laufen, die die Websocket-Schnittstelle nutzt.

                    Max

                    Kommentar


                      #11
                      Hallo Max,

                      ich denke das Leak im Visu-Plugin ist gefixed (in develop).

                      Wenn das über einen längeren Zeitraum stabil läuft, porte ich das in Master. Bis jetzt sieht es auf jeden Fall gut aus.

                      Bis bald

                      Marcus

                      Kommentar


                        #12
                        Hallo,

                        kurzer Zwischenstand: Der Verbrauch auf meinem Produktivrechner ist sehr stabil. Ich habe es am 06. Vormittags neu gestartet. Ich werde die Änderung demnächst mal backporten.

                        Bis bald

                        Marcus
                        Angehängte Dateien

                        Kommentar


                          #13
                          Danke für die Erweiterung des Logs, das war schon mal sehr hilfreich.

                          Ich bekomme nun folgende Meldung:
                          Code:
                          2013-08-13 09:09:37 Scheduler    INFO     Current Threads: SmartHome.py, 1w-sen, series, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, heizungslimitierung, heizungslimitierung, 1w-sen, heizungslimitierung, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, series, Scheduler, 1w-sen, 1w-sen, series, 1w-sen, 1w-sen, 1w-sen, 1w-sen, heizungslimitierung, 1w-sen, 1w-sen, 1w-sen, 1w-sen, series, 1w-sen, 1w-sen, 1w-sen, heizungslimitierung, 1w-sen, 1w-sen, 1w-sen, 1w-sen, 1w-sen, Thread-50
                          Warum die Heizungslimitierungs-Funktion hängt, ist mir schleierhaft. Sie dient dazu, den immer mal wieder spinnenden Heizungsregler einzubremsen. Loops oder Ähnliches sind nicht enthalten, allerdings diverse Temperaturabfragen:
                          Code:
                          #!/usr/bin/env python
                          # Setzt in einem Raum bei Ueberschreiten der eingestellten Temperatur 
                          # um mehrals max_delta die PWM der Heizung zwangsweise auf 0 
                          # (durch Aktivieren der Zwangsstellung). 
                          # Nach Unterschreiten der Solltemperatur wird die Zwangsstellung wieder
                          # zurueckgenommen.
                          max_delta = 1
                          
                          if (sh.eg.wohnzimmer.heizung.temperatur.ist() > sh.eg.wohnzimmer.heizung.temperatur.soll() + max_delta):
                              sh.eg.wohnzimmer.heizung.zwang(1)
                          if (sh.eg.wohnzimmer.heizung.temperatur.ist() <= sh.eg.wohnzimmer.heizung.temperatur.soll()):
                              sh.eg.wohnzimmer.heizung.zwang(0)
                          
                          if (sh.eg.eingang.heizung.temperatur.ist() > sh.eg.eingang.heizung.temperatur.soll() + max_delta):
                              sh.eg.eingang.heizung.zwang(1)
                          if (sh.eg.eingang.heizung.temperatur.ist() <= sh.eg.eingang.heizung.temperatur.soll()):
                              sh.eg.eingang.heizung.zwang(0)
                          
                          if (sh.eg.kueche.heizung.temperatur.ist() > sh.eg.kueche.heizung.temperatur.soll() + max_delta):
                              sh.eg.kueche.heizung.zwang(1)
                          if (sh.eg.kueche.heizung.temperatur.ist() <= sh.eg.kueche.heizung.temperatur.soll()):
                              sh.eg.kueche.heizung.zwang(0)
                          
                          if (sh.og.ost.heizung.temperatur.ist() > sh.og.ost.heizung.temperatur.soll() + max_delta):
                              sh.og.ost.heizung.zwang(1)
                          if (sh.og.ost.heizung.temperatur.ist() <= sh.og.ost.heizung.temperatur.soll()):
                              sh.og.ost.heizung.zwang(0)
                          
                          if (sh.og.west.heizung.temperatur.ist() > sh.og.west.heizung.temperatur.soll() + max_delta):
                              sh.og.west.heizung.zwang(1)
                          if (sh.og.west.heizung.temperatur.ist() <= sh.og.west.heizung.temperatur.soll()):
                              sh.og.west.heizung.zwang(0)
                          
                          if (sh.dg.ost.heizung.temperatur.ist() > sh.dg.ost.heizung.temperatur.soll() + max_delta):
                              sh.dg.ost.heizung.zwang(1)
                          if (sh.dg.ost.heizung.temperatur.ist() <= sh.dg.ost.heizung.temperatur.soll()):
                              sh.dg.ost.heizung.zwang(0)
                                                  
                          if (sh.dg.west.heizung.temperatur.ist() > sh.dg.west.heizung.temperatur.soll() + max_delta):
                              sh.dg.west.heizung.zwang(1)
                          if (sh.dg.west.heizung.temperatur.ist() <= sh.dg.west.heizung.temperatur.soll()):
                              sh.dg.west.heizung.zwang(0)
                          Mein Onewire hat bekanntermaßen Probleme, rechnerisch müsste die parasitäre Versorgung zwar klappen, praktisch kommt es aber häufig zu Lesefehlern. Ich bin dran, habe aber noch andere Baustellen zu erledigen.
                          Die Lesefehler scheinen dem Onewire-Plugin aber gar nicht zu schmecken, 1w-sen läuft anscheinend x-mal parallel.
                          Was tun, sprach Zeus (außer die Temperatur- und Feuchtemessung auf die Rille zu bekommen)?

                          Max

                          Kommentar


                            #14
                            Hallo Max,

                            kannst Du mir bitte mal ein Debug-Log und die Config der Items in der Logik posten?
                            Dann kann ich mir das heute Abend mal ansehen.

                            Edit: und bitte auch noch die plugin.conf bzw. den 1-Wire Abschnitt.

                            Danke

                            Marcus

                            Kommentar


                              #15
                              smarthome.py stürzt ab

                              Hallo Max,

                              unabhängig von deinem Problem ein Verbesserungsvorschlag zu der Logik. Schau dir mal die wildcards für Logiken an: https://knx-user-forum.de/showthread.php?t=25822
                              Deine Logik ist prädestiniert für deren Einsatz
                              Mit freundlichen Grüßen
                              Niko Will

                              Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                              - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                              Kommentar

                              Lädt...
                              X