Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Beispiel alle ioBroker Prozesse / Speicherverbrauch

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Beispiel alle ioBroker Prozesse / Speicherverbrauch

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
60 Beiträge 14 Kommentatoren 7.6k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    LJSven
    schrieb am zuletzt editiert von
    #47

    Ich habe das Script mal installiert und bekomme folgende Werte?! Ist das in Ordnung? Mich wundert der 109% Speicherverbrauch:

    ! Anzahl der Prozesse: 24
    ! CPU-Lust gesamt: 30.2 %
    ! Keine Instanzen doppelt aktiv: true
    ! Speicherverbrauch gesamt: 1028 MB
    ! Speicherverbrauch prozentual: 109.6 %

    1 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      LJSven
      schrieb am zuletzt editiert von
      #48

      Machnmal habe ich über 100% - kann jemand sagen, ob das alles okay aussieht, oder wo ich optimieren soll?

      6907_prozesse2.jpg 6907_prozesse.jpg

      1 Antwort Letzte Antwort
      0
      • DutchmanD Offline
        DutchmanD Offline
        Dutchman
        Developer Most Active Administrators
        schrieb am zuletzt editiert von
        #49

        Speicher Verbrauch über 100% bedeutet eventuell das er swapped ?

        Sent from my iPhone using Tapatalk

        1 Antwort Letzte Antwort
        0
        • L Offline
          L Offline
          LJSven
          schrieb am zuletzt editiert von
          #50

          Okay, aber ist das „schlimm“?

          Gesendet von iPhone mit Tapatalk

          1 Antwort Letzte Antwort
          0
          • HomoranH Offline
            HomoranH Offline
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #51

            @LJSven:

            Machnmal habe ich über 100% `
            Das ist IMHO die Auswertung von top, da wird pro Prozess die Ausnutzung eines Kerns angegeben., bei einem 4-Kerner also durch 4 zu teilen (vorausgesetzt ioBroker nutzt auch 4 Kerne).

            Beim Speicher habe ich deutlich weniger:
            144_processes.jpg

            Gruß

            rainer

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              schrieb am zuletzt editiert von
              #52

              @LJSven:

              Okay, aber ist das „schlimm“?

              Gesendet von iPhone mit Tapatalk `

              SWAP ist immer slecht, bedeutet das du zu wenig Arbeitspeicher hast und anstatt im snellen RAM werden Sachen auf deine HDD/SD ausgelagert.

              Die Performance von Festplatten und einer SD ist deutlich geringer als RAM Speicher und die viele lese/schreib Zugänge findet eine SD auch nicht gerade toll (Lebensdauer)

              Sent from my iPhone using Tapatalk

              1 Antwort Letzte Antwort
              0
              • L Offline
                L Offline
                LJSven
                schrieb am zuletzt editiert von
                #53

                Okay! Wie kann ich den Raspberry aufrüsten, oder welchen soll ich nehmen?

                Gesendet von iPhone mit Tapatalk

                1 Antwort Letzte Antwort
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  schrieb am zuletzt editiert von
                  #54

                  @LJSven:

                  Okay! Wie kann ich den Raspberry aufrüsten `

                  Das geht nicht… Speicher ist fest verbaut.

                  Umsteigen auf nem einplatinen Computer mit mehr RAM (orange Pi/Rock64) oder wen man auch was auf Dauer haben möchten rufen dir nen gefallen und nimm nen NUC

                  Sent from my iPhone using Tapatalk

                  1 Antwort Letzte Antwort
                  0
                  • StabilostickS Offline
                    StabilostickS Offline
                    Stabilostick
                    schrieb am zuletzt editiert von
                    #55

                    @LJSven: In Deinem Screenshoot von 04.07.2018, 16:15, finde ich die "CPU-Lust" cool. Manchmal hat meine CPU auch keine Lust…. :lol:

                    1 Antwort Letzte Antwort
                    0
                    • L Offline
                      L Offline
                      LJSven
                      schrieb am zuletzt editiert von
                      #56

                      @Stabilostick:

                      @LJSven: In Deinem Screenshoot von 04.07.2018, 16:15, finde ich die "CPU-Lust" cool. Manchmal hat meine CPU auch keine Lust…. :lol: `
                      [emoji23]

                      Gesendet von iPhone mit Tapatalk

                      1 Antwort Letzte Antwort
                      0
                      • LordDuplo88L Offline
                        LordDuplo88L Offline
                        LordDuplo88
                        schrieb am zuletzt editiert von
                        #57

                        Hallo,

                        das Skript hat den Umzug des Forums scheinbar nicht überstanden und ist defekt.
                        Hat jemand noch das funktionierende Skript und könnte es mir zukommen lassen?

                        Vielen Dank.

                        HomoranH 1 Antwort Letzte Antwort
                        0
                        • LordDuplo88L LordDuplo88

                          Hallo,

                          das Skript hat den Umzug des Forums scheinbar nicht überstanden und ist defekt.
                          Hat jemand noch das funktionierende Skript und könnte es mir zukommen lassen?

                          Vielen Dank.

                          HomoranH Offline
                          HomoranH Offline
                          Homoran
                          Global Moderator Administrators
                          schrieb am zuletzt editiert von
                          #58

                          @Philip-Ahlers

                          Ist es das hier?

                          var pfad            = "Systeminfos.ioBroker.Prozesse" + "."; // Pfad in dem die Datenpunkte angelegt werden
                          
                          // Datenpunktnamen:
                          var idProzesse          = pfad + 'ioBroker_Prozesse';
                          var idMemAll            = pfad + 'ioBroker_Speicher_gesamt';
                          var idAnzProzesse       = pfad + 'ioBroker_Anzahl_Prozesse';
                          var idCpuAll            = pfad + 'ioBroker_CPU_Gesamt';
                          var idMemPercent        = pfad + 'ioBroker_Speicher_prozentual';
                          var idInstanzenEinmal   = pfad + 'ioBroker_Instanzen_einmal_aktiv';
                          
                          
                          // regelmässige Wiederholungen der Abfrage
                          var cronStr         = "*/2 * * * *";
                          
                          var abfrage         = 'ps -A aux --sort -pcpu | grep " [i]o.*"';
                          
                          
                          
                          
                          // -----------------------------------------------------------------------------
                          
                          
                          createState(idProzesse, "", {
                              name: 'ioBroker laufende Prozesse Objekt',
                              desc: 'ioBroker laufende Prozesse Objekt, Speicherverbrauch',
                              type: 'string',
                              unit: '',
                              role: 'object'
                          });
                          
                          createState(idMemAll, 0, {
                              name: 'ioBroker Speicherverbrauch gesamt',
                              desc: 'ioBroker Speicherverbrauch gesamt (RSS)',
                              type: 'number',
                              unit: 'MB',
                              role: 'value'
                          });
                          
                          createState(idAnzProzesse, 0, {
                              name: 'ioBroker Anzahl Prozesse',
                              desc: 'ioBroker Anzahl aktiver Prozesse',
                              type: 'number',
                              unit: '',
                              role: 'value'
                          });
                          
                          createState(idCpuAll, 0.0, {
                              name: 'ioBroker CPU-Last gesamt',
                              desc: 'ioBroker CPU-Last gesamt',
                              type: 'number',
                              unit: '%',
                              role: 'value'
                          });
                          
                          createState(idMemPercent, 0.0, {
                              name: 'Speicherverbrauch prozentual',
                              desc: 'Speicherverbrauch prozentual',
                              type: 'number',
                              unit: '%',
                              role: 'value'
                          });
                          
                          createState(idInstanzenEinmal, true, {
                              name: 'keine Instanzen doppelt aktiv',
                              desc: 'jeder aktive ioBroker Prozess ist nur einmal aktiv',
                              type: 'boolean',
                              unit: '',
                              role: 'value'
                          });
                          
                          
                          
                          // -----------------------------------------------------------------------------
                          
                          
                          function doppelteProzesse(arr) {
                             var mehrfacheProzesse = [];
                             var anzProzesse = (arr.length);
                             var anzProzessAktiv = 0;
                             for (var i = 0; i < anzProzesse; i++) {
                                 if (mehrfacheProzesse.indexOf(arr[i].command) == -1) {
                                     anzProzessAktiv = zaehleProzesse(arr,arr[i].command);
                                     if (anzProzessAktiv > 1) {
                                         log("Prozess: " + arr[i].command+", mehrfach aktiv: " + anzProzessAktiv +" mal","warn");
                                         mehrfacheProzesse.push(arr[i].command);
                                         mehrfacheProzesse.push(anzProzessAktiv);
                                     }
                                 }
                             }    
                             return mehrfacheProzesse;
                          }
                          
                          function zaehleProzesse(arr,command) {
                             var count = 0;
                             var anzProzesse = (arr.length);
                             for (var i = 0; i < anzProzesse; i++) {
                                 if(arr[i].command === command) {
                                     count++;
                                 }
                             }    
                             return count;
                          }
                          
                          
                          function writeJson(json) {
                             return JSON.stringify(json);    // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
                          }
                          
                          
                          function getMemAbsolut(json) {
                             var anzProzesse = (json.length);
                             var mem = 0;
                             for (var i = 0; i < anzProzesse; i++) {
                                 mem = mem + json[i].rss;
                             }    
                             return mem;
                          }
                          
                          function getCpu(json) {
                             var anzProzesse = (json.length);
                             var cpu = 0.0;
                             for (var i = 0; i < anzProzesse; i++) {
                                 cpu = cpu + json[i].cpu;
                             }    
                             return cpu;
                          }
                          
                          function getMem(json) {
                             var anzProzesse = (json.length);
                             var mem = 0.0;
                             for (var i = 0; i < anzProzesse; i++) {
                                 mem = mem + json[i].mem;
                             }    
                             return mem;
                          }
                          
                          
                          function createArrayJson(arr) {
                             var jsonArr     = [];
                             var anzDP       = 11;                       // Anzahl Datenreihen in der Abfrage
                             var anzProzesse = (arr.length-1)/anzDP;
                          
                             for (var i = 0; i < anzProzesse; i++) {
                                 jsonArr.push({
                                     command:    arr[10 + i*anzDP],              // ioBroker Prozess (COMMAND = Kommando, mit dem der Prozess gestartet wurde)
                                     pid:        arr[ 1 + i*anzDP],              // Prozess ID
                                     cpu:        parseFloat(arr[ 2 + i*anzDP]),  // aktueller CPU-Last in %
                                     mem:        parseFloat(arr[ 3 + i*anzDP]),  // aktueller Verbrauch physikalischer Speicher %
                                     vmem:       parseInt(arr[ 4 + i*anzDP]),    // 
                                     rss:        parseInt(arr[ 5 + i*anzDP]),    // physikalische Speichernutzung
                                     start:      arr[ 8 + i*anzDP],              // Startzeitpunkt des Prozesses
                                     time:       arr[ 9 + i*anzDP]               // bisher verbrauchte CPU Zeit
                                 });
                             }
                             return jsonArr;
                          }
                          
                          
                          function abfrageConsole() {
                             exec(abfrage, function(err, stdout, stderr) {
                                 if (err) {
                                     log(err,"error");
                                     return;
                                 }
                                 stdout = stdout.replace(/\n+/g, " "); // neue Zeile gegen Leerzeichen ersetzen
                                 stdout = stdout.split(/ +/g);         // array erstellen, Lerzeichen als Trenner
                                 
                                 var anzProzesse = (stdout.length-1) / 11;
                                 
                                 //log(stdout);
                                 //log("Anzahl laufender ioBroker Prozesse: " + anzProzesse);
                                 
                                 var jsonArr = createArrayJson(stdout);
                                 var mem         = Math.floor(getMemAbsolut(jsonArr)/1024);
                                 var cpu         = Math.floor(getCpu(jsonArr)*10)/10;
                                 var memPercent  = Math.floor(getMem(jsonArr)*10)/10;
                          
                                 var doppeltArr = doppelteProzesse(jsonArr);
                                 
                                 if(doppeltArr.length === 0) {
                                     setState(idInstanzenEinmal,true);
                                 } else {
                                     setState(idInstanzenEinmal,false);
                                 }
                          
                                 setState(idProzesse     ,writeJson(jsonArr));
                                 setState(idMemAll       ,mem);
                                 setState(idAnzProzesse  ,anzProzesse);
                                 setState(idCpuAll       ,cpu);
                                 setState(idMemPercent   ,memPercent);
                             });
                          }
                          
                          
                          function abfragen() {
                             abfrageConsole();
                          }
                          
                          // regelmässige Wiederholungen
                          // -----------------------------------------------------------------------------
                          schedule(cronStr, abfragen);
                          
                          
                          // main
                          // -----------------------------------------------------------------------------
                          function main() {
                             abfragen();
                          }
                          
                          
                          // Start Skript:
                          // -----------------------------------------------------------------------------
                          
                          setTimeout(main,    500);
                          

                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                          LordDuplo88L 1 Antwort Letzte Antwort
                          1
                          • HomoranH Homoran

                            @Philip-Ahlers

                            Ist es das hier?

                            var pfad            = "Systeminfos.ioBroker.Prozesse" + "."; // Pfad in dem die Datenpunkte angelegt werden
                            
                            // Datenpunktnamen:
                            var idProzesse          = pfad + 'ioBroker_Prozesse';
                            var idMemAll            = pfad + 'ioBroker_Speicher_gesamt';
                            var idAnzProzesse       = pfad + 'ioBroker_Anzahl_Prozesse';
                            var idCpuAll            = pfad + 'ioBroker_CPU_Gesamt';
                            var idMemPercent        = pfad + 'ioBroker_Speicher_prozentual';
                            var idInstanzenEinmal   = pfad + 'ioBroker_Instanzen_einmal_aktiv';
                            
                            
                            // regelmässige Wiederholungen der Abfrage
                            var cronStr         = "*/2 * * * *";
                            
                            var abfrage         = 'ps -A aux --sort -pcpu | grep " [i]o.*"';
                            
                            
                            
                            
                            // -----------------------------------------------------------------------------
                            
                            
                            createState(idProzesse, "", {
                                name: 'ioBroker laufende Prozesse Objekt',
                                desc: 'ioBroker laufende Prozesse Objekt, Speicherverbrauch',
                                type: 'string',
                                unit: '',
                                role: 'object'
                            });
                            
                            createState(idMemAll, 0, {
                                name: 'ioBroker Speicherverbrauch gesamt',
                                desc: 'ioBroker Speicherverbrauch gesamt (RSS)',
                                type: 'number',
                                unit: 'MB',
                                role: 'value'
                            });
                            
                            createState(idAnzProzesse, 0, {
                                name: 'ioBroker Anzahl Prozesse',
                                desc: 'ioBroker Anzahl aktiver Prozesse',
                                type: 'number',
                                unit: '',
                                role: 'value'
                            });
                            
                            createState(idCpuAll, 0.0, {
                                name: 'ioBroker CPU-Last gesamt',
                                desc: 'ioBroker CPU-Last gesamt',
                                type: 'number',
                                unit: '%',
                                role: 'value'
                            });
                            
                            createState(idMemPercent, 0.0, {
                                name: 'Speicherverbrauch prozentual',
                                desc: 'Speicherverbrauch prozentual',
                                type: 'number',
                                unit: '%',
                                role: 'value'
                            });
                            
                            createState(idInstanzenEinmal, true, {
                                name: 'keine Instanzen doppelt aktiv',
                                desc: 'jeder aktive ioBroker Prozess ist nur einmal aktiv',
                                type: 'boolean',
                                unit: '',
                                role: 'value'
                            });
                            
                            
                            
                            // -----------------------------------------------------------------------------
                            
                            
                            function doppelteProzesse(arr) {
                               var mehrfacheProzesse = [];
                               var anzProzesse = (arr.length);
                               var anzProzessAktiv = 0;
                               for (var i = 0; i < anzProzesse; i++) {
                                   if (mehrfacheProzesse.indexOf(arr[i].command) == -1) {
                                       anzProzessAktiv = zaehleProzesse(arr,arr[i].command);
                                       if (anzProzessAktiv > 1) {
                                           log("Prozess: " + arr[i].command+", mehrfach aktiv: " + anzProzessAktiv +" mal","warn");
                                           mehrfacheProzesse.push(arr[i].command);
                                           mehrfacheProzesse.push(anzProzessAktiv);
                                       }
                                   }
                               }    
                               return mehrfacheProzesse;
                            }
                            
                            function zaehleProzesse(arr,command) {
                               var count = 0;
                               var anzProzesse = (arr.length);
                               for (var i = 0; i < anzProzesse; i++) {
                                   if(arr[i].command === command) {
                                       count++;
                                   }
                               }    
                               return count;
                            }
                            
                            
                            function writeJson(json) {
                               return JSON.stringify(json);    // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
                            }
                            
                            
                            function getMemAbsolut(json) {
                               var anzProzesse = (json.length);
                               var mem = 0;
                               for (var i = 0; i < anzProzesse; i++) {
                                   mem = mem + json[i].rss;
                               }    
                               return mem;
                            }
                            
                            function getCpu(json) {
                               var anzProzesse = (json.length);
                               var cpu = 0.0;
                               for (var i = 0; i < anzProzesse; i++) {
                                   cpu = cpu + json[i].cpu;
                               }    
                               return cpu;
                            }
                            
                            function getMem(json) {
                               var anzProzesse = (json.length);
                               var mem = 0.0;
                               for (var i = 0; i < anzProzesse; i++) {
                                   mem = mem + json[i].mem;
                               }    
                               return mem;
                            }
                            
                            
                            function createArrayJson(arr) {
                               var jsonArr     = [];
                               var anzDP       = 11;                       // Anzahl Datenreihen in der Abfrage
                               var anzProzesse = (arr.length-1)/anzDP;
                            
                               for (var i = 0; i < anzProzesse; i++) {
                                   jsonArr.push({
                                       command:    arr[10 + i*anzDP],              // ioBroker Prozess (COMMAND = Kommando, mit dem der Prozess gestartet wurde)
                                       pid:        arr[ 1 + i*anzDP],              // Prozess ID
                                       cpu:        parseFloat(arr[ 2 + i*anzDP]),  // aktueller CPU-Last in %
                                       mem:        parseFloat(arr[ 3 + i*anzDP]),  // aktueller Verbrauch physikalischer Speicher %
                                       vmem:       parseInt(arr[ 4 + i*anzDP]),    // 
                                       rss:        parseInt(arr[ 5 + i*anzDP]),    // physikalische Speichernutzung
                                       start:      arr[ 8 + i*anzDP],              // Startzeitpunkt des Prozesses
                                       time:       arr[ 9 + i*anzDP]               // bisher verbrauchte CPU Zeit
                                   });
                               }
                               return jsonArr;
                            }
                            
                            
                            function abfrageConsole() {
                               exec(abfrage, function(err, stdout, stderr) {
                                   if (err) {
                                       log(err,"error");
                                       return;
                                   }
                                   stdout = stdout.replace(/\n+/g, " "); // neue Zeile gegen Leerzeichen ersetzen
                                   stdout = stdout.split(/ +/g);         // array erstellen, Lerzeichen als Trenner
                                   
                                   var anzProzesse = (stdout.length-1) / 11;
                                   
                                   //log(stdout);
                                   //log("Anzahl laufender ioBroker Prozesse: " + anzProzesse);
                                   
                                   var jsonArr = createArrayJson(stdout);
                                   var mem         = Math.floor(getMemAbsolut(jsonArr)/1024);
                                   var cpu         = Math.floor(getCpu(jsonArr)*10)/10;
                                   var memPercent  = Math.floor(getMem(jsonArr)*10)/10;
                            
                                   var doppeltArr = doppelteProzesse(jsonArr);
                                   
                                   if(doppeltArr.length === 0) {
                                       setState(idInstanzenEinmal,true);
                                   } else {
                                       setState(idInstanzenEinmal,false);
                                   }
                            
                                   setState(idProzesse     ,writeJson(jsonArr));
                                   setState(idMemAll       ,mem);
                                   setState(idAnzProzesse  ,anzProzesse);
                                   setState(idCpuAll       ,cpu);
                                   setState(idMemPercent   ,memPercent);
                               });
                            }
                            
                            
                            function abfragen() {
                               abfrageConsole();
                            }
                            
                            // regelmässige Wiederholungen
                            // -----------------------------------------------------------------------------
                            schedule(cronStr, abfragen);
                            
                            
                            // main
                            // -----------------------------------------------------------------------------
                            function main() {
                               abfragen();
                            }
                            
                            
                            // Start Skript:
                            // -----------------------------------------------------------------------------
                            
                            setTimeout(main,    500);
                            

                            LordDuplo88L Offline
                            LordDuplo88L Offline
                            LordDuplo88
                            schrieb am zuletzt editiert von
                            #59

                            @Homoran

                            Ja das ist es, vielen lieben Dank.

                            1 Antwort Letzte Antwort
                            0
                            • Basti97B Offline
                              Basti97B Offline
                              Basti97
                              Most Active
                              schrieb am zuletzt editiert von
                              #60

                              Wie kann man das Script erweitern das auch die iobroker Slave Adapter angezeigt werden?

                              Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              375

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe