Ankündigung

Einklappen
Keine Ankündigung bisher.

Stark erhöhte CPU Auslastung bei dem Code

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

    Stark erhöhte CPU Auslastung bei dem Code

    Hi,
    stehe gerade irgendwie voll auf der Leitung.
    Habe mir schnelle einen LBS gemacht der mir 16 Eingänge summieren soll.
    Den rufe ich 5x auf und die CPU Auslastung steigt um 20% ???
    Was mach ich da falsch?

    Code:
    function LB_LBSID($id) {
    if ($E=logic_getInputs($id)) {
      if ($E[1]['refresh']==1 || $E[2]['refresh']==1 || $E[3]['refresh']==1 || $E[4]['refresh']==1 || $E[5]['refresh']==1 || $E[6]['refresh']==1 || $E[7]['refresh']==1 || $E[8]['refresh']==1 || $E[9]['refresh']==1 || $E[10]['refresh']==1 || $E[11]['refresh']==1 || $E[12]['refresh']==1 || $E[13]['refresh']==1 || $E[14]['refresh']==1 || $E[15]['refresh']==1 || $E[16]['refresh']==1) {
        $sum=($E[1]['value'] + $E[2]['value'] + $E[3]['value'] + $E[4]['value'] + $E[5]['value'] + $E[6]['value'] + $E[7]['value'] + $E[8]['value'] + $E[9]['value'] + $E[10]['value'] + $E[11]['value'] + $E[12]['value'] + $E[13]['value'] + $E[14]['value'] + $E[15]['value'] + $E[16]['value']);
        setLogicLinkAusgang($id,1,$sum);
      }
    }
    }

    Gruß
    Seppl

    #2
    Was genau bedeutet "du rufst ihn 5mal auf"? Pro Sekunde, Minute, Stunde?
    Bleibt die Auslastung um 20% höher? Oder nur wenn er abgearbeitet wird?
    Im obigen Code sehe ich eigentlich keinen Grund für dieses Verhalten.
    Du solltest mal den kompletten Code posten und vor allem die Logik dazu.

    Kommentar


      #3
      Hi,
      er ist 5x in einer Logikseite verwendet.
      Mit der Logikseite habe ich 23% CPU Auslastung (durchgehend).
      Wenn ich die Seite deaktiviere nur 3%..

      Logik.PNG

      Code:
      ###[DEF]###
      [name=Summe 16 Eing]
      
      [e#1=E1 #init=0]
      [e#2=E2 #init=0]
      [e#3=E3 #init=0]
      [e#4=E4 #init=0]
      [e#5=E5 #init=0]
      [e#6=E6 #init=0]
      [e#7=E7 #init=0]
      [e#8=E8 #init=0]
      [e#9=E9 #init=0]
      [e#10=E10 #init=0]
      [e#11=E11 #init=0]
      [e#12=E12 #init=0]
      [e#13=E13 #init=0]
      [e#14=E14 #init=0]
      [e#15=E15 #init=0]
      [e#16=E16 #init=0]
      
      [a#1=Summe]
      ###[/DEF]###
      
      
      ###[HELP]###
      Vorlage: Standard-LBS
      ###[/HELP]###
      
      
      ###[LBS]###
      <?
      function LB_LBSID($id) {
          if ($E=logic_getInputs($id)) {
            if ($E[1]['refresh']==1 || $E[2]['refresh']==1 || $E[3]['refresh']==1 || $E[4]['refresh']==1 || $E[5]['refresh']==1 || $E[6]['refresh']==1 || $E[7]['refresh']==1 || $E[8]['refresh']==1 || $E[9]['refresh']==1 || $E[10]['refresh']==1 || $E[11]['refresh']==1 || $E[12]['refresh']==1 || $E[13]['refresh']==1 || $E[14]['refresh']==1 || $E[15]['refresh']==1 || $E[16]['refresh']==1) {
              $sum=($E[1]['value'] + $E[2]['value'] + $E[3]['value'] + $E[4]['value'] + $E[5]['value'] + $E[6]['value'] + $E[7]['value'] + $E[8]['value'] + $E[9]['value'] + $E[10]['value'] + $E[11]['value'] + $E[12]['value'] + $E[13]['value'] + $E[14]['value'] + $E[15]['value'] + $E[16]['value']);
              setLogicLinkAusgang($id,1,$sum);
            }
          }
      }
      ?>
      ###[/LBS]###
      
      
      ###[EXEC]###
      <?
      ?>
      ###[/EXEC]###


      Gruß
      Seppl

      Kommentar


        #4
        Also am Baustein liegt es sicher nicht. Daher kanns nur an deiner Logik liegen.
        Entweder du baust mit einem deiner Ausgänge eine Schleife. Dann sollte aber vermutlich die Last noch höher sein als 20%.
        Oder die Eingänge werden dauernd getriggert. Was sind das denn für Eingangswerte? Wo kommen die her und wie oft werden die gesendet?

        EDIT: Du kannst im ersten Widget rechts neben der Adminhauptseite sehr schön sehen, welcher iKOs gefeuert werden. Darüber müsste es eigentlich sichtbar sein.

        Kommentar


          #5
          ... vielleicht ist es sinnvoll, die Eingänge nicht direkt zu "befeuern", sondern noch jeweils ein "send-by-change" davor zu schalten?
          Dann verbrauchst Du eine ganze Menge davon, aber Versuch macht klug. Und wenn es nicht hilft, kannst Du sie wieder rausnehmen (zurückgeben ;-)

          Kommentar


            #6
            das sind ja GA, keine KO am Eingang. Sind das Staus-Meldungen? Ich tippe auf Verbrauchswerte. Könnte es sein, dass einer oder mehrere davon vom messenden Aktor (oder was auch immer die Quelle ist) in hoher Folge kommen? Da wäre es sinnvoll, dem Aktor zu sagen, nur minütlich zu senden (wenn Du es denn wirklich so oft brauchst) ,statt bei jeder Wertänderung. Oder Du setzt eine höhere Toleranzschwelle für das Senden ("Bei Änderung > x %") statt 1% auf 10%. Dann kommen nur seltener Werte und die Logik muss nicht so oft arbeiten.
            Die hohe Sendefrequenz von GA kann man gut auf der Admin-Seite rechts neben der Hauptseite sehen: Wenn da eine GA immer(!) einen langen grünen Balken hat, liefert die Quelle die GA vermutlich zu oft. Eigentlich sollten GA aus der Liste immer wieder verschwinden bzw. nur selten erscheinen. Anders gesagt: Solche GA machen auch Bus-Last - die es zum Nutzen abzuwägen gilt.

            Kommentar


              #7
              Hi,
              bin hier noch eine Auflösung schuldig.
              Habe es wirklich geschafft durch das hin und her kopieren geschafft eine schleife zu produzieren *schäm*.
              Hatte am Eingang und Ausgang die selbe Interne Variable....
              LBS funktioniert somit ;o)
              Vielen Dank für die Hilfe.

              Gruß
              Seppl

              Kommentar

              Lädt...
              X