Res. Observer & Memory

Hier finden YaCy User Hilfe wenn was nicht funktioniert oder anders funktioniert als man dachte. Bei offensichtlichen Fehlern diese bitte gleich in die Bugs (http://bugs.yacy.net) eintragen.
Forumsregeln
In diesem Forum geht es um Benutzungsprobleme und Anfragen für Hilfe. Wird dabei ein Bug identifiziert, wird der thread zur Bearbeitung in die Bug-Sektion verschoben. Wer hier also einen Thread eingestellt hat und ihn vermisst, wird ihn sicherlich in der Bug-Sektion wiederfinden.

Res. Observer & Memory

Beitragvon Lotus » Di Dez 01, 2009 9:24 pm

Ich habe auf einem kleinen Peer (DHT <200k Links) einen unerwarteten DHT-in-Stop wegen "Speichermangel" beobachtet.

Code: Alles auswählen
I 2009/12/01 15:02:21 YACY Accepting URL 7970/22293 from peer ...
I 2009/12/01 15:02:21 MEMORY performed necessary GC, freed 3902 KB (requested/available/average: 34475 / 37113 / 25675 KB)
I 2009/12/01 15:02:21 YACY Accepting URL 7971/22293 from peer ...


Ärgerlich ist, dass nachfolgend lange kein geloggter GC mehr ausgeführt wurde und dann >100MB freier Speicher gemeldet werden, der ja auch da ist.
Gibt es Ideen, was noch gemacht werden kann? Ansonsten muss die derzeitige Lösung wieder raus, oder zumindest das Speicherlimit stark gesenkt werden.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Res. Observer & Memory

Beitragvon Lotus » Do Dez 10, 2009 7:24 pm

Meine jüngste Änderung 6517 konnte ich zumindest für den gewollten Fall als gut einstufen.
Ich habe den GC zufällig in Logs gefunden, die ich garnicht danach durchsuchen wollte und habe mal die entsprechende Installation gestartet um nachzuschauen. Dort hatte ich auch schon von Hand DHT-in abgeschaltet.

Momentan ist die Abschaltbedingung für DHT-in: 4x < 50MB im Maximalabstand von 10 Minuten zwischen den Erkennungen.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Res. Observer & Memory

Beitragvon sixcooler » Do Dez 10, 2009 9:22 pm

Meiner Beobachtung nach läuft das mit dem Observer wirklich recht gut.
Besten Dank!

Das es manchmal nicht zum geloggten GC kommt, liegt evtl. an unglücklichen werten in 'getAverageGCFree()'
Ich experimentiere gerade damit diesen wert einer 'alterung' zu unterziehen...
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm

Re: Res. Observer & Memory

Beitragvon sixcooler » Do Jan 07, 2010 9:12 pm

Hallo Lotus,

da du mit svn6554 dieses weiter geführt hast eine Frage:
Warum wird der counter bei unterschreiten der Zeit (Zeile 199) zurückgesetzt?
Dieses wird ja ausgeführt wenn wenig Speicher in kürzeren Abständen vorkommt - warum soll das den Zähler zurücksetzen?

Auf der Anderen Seite als Idee: Counter zurücksetzen in setDHTallowed und setDHTkbytes - also bei neukonfigurationen.
(Bleibt der Zähler bei seinem Wert gibt es keine verzörung mehr - bis zum neustart)

Evtl. sogar den schalter wieder zurückumlegen lassen - um dht wieder zu erlauben?
(wenn z.b. der doppelte speicher vorhanden ist)

Code: Alles auswählen
Index: source/net/yacy/kelondro/util/MemoryControl.java
===================================================================
--- source/net/yacy/kelondro/util/MemoryControl.java   (Revision 6554)
+++ source/net/yacy/kelondro/util/MemoryControl.java   (Arbeitskopie)
@@ -182,27 +183,30 @@
     

     public static void setDHTallowed() {

        allowDHT = true;

+       DHTtresholdCount = 0;

     }

     

     public static void setDHTkbytes(final long kbytes) {

        DHTkbytes = kbytes;

+       DHTtresholdCount = 0;

     }

     

     private static void checkDHTrule(final long available) {

        // disable dht if memory is less than treshold - 4 times, maximum 11 minutes between each detection

-       if ((available >> 10) < DHTkbytes) {

+       if (allowDHT && (available >> 10) < DHTkbytes) {

           final long t = System.currentTimeMillis();

           if(prevDHTtreshold + 11L /* minutes */ * 60000L > t) {

              DHTtresholdCount++;

              if(DHTtresholdCount > 3 /* occurencies - 1 */) allowDHT = false;

           }

-          else DHTtresholdCount = 1;

+          // else DHTtresholdCount = 1; // why?

           

           prevDHTtreshold = t;

           

-         log.logInfo("checkDHTrule: below treshold; tresholdCount: " + DHTtresholdCount + "; allowDHT: " + allowDHT);

+          log.logInfo("checkDHTrule: below treshold; tresholdCount: " + DHTtresholdCount + "; allowDHT: " + allowDHT);

+       } else if (!allowDHT && (available >> 10) > 2 * DHTkbytes) {

+          setDHTallowed();

        }

-       //allowDHT = ((available >> 10) < DHTkbytes) ? false : true; // stupid

     }



     /**



der Observer könnt dann etwa so das dht-in wieder reaktivieren:
Code: Alles auswählen
Index: source/de/anomic/crawler/ResourceObserver.java
===================================================================
--- source/de/anomic/crawler/ResourceObserver.java   (Revision 6554)
+++ source/de/anomic/crawler/ResourceObserver.java   (Arbeitskopie)
@@ -57,6 +57,8 @@
     private int disksFree;
     private int memoryFree;
     
+    private static boolean disabledDHT = false;
+   
     /**
      * The ResourceObserver checks the resources
      * and pauses crawls if necessary
@@ -136,11 +138,19 @@
                log.logInfo("disabling index receive");
                 sb.setConfig(SwitchboardConstants.INDEX_RECEIVE_ALLOW, false);
                 sb.peers.mySeed().setFlagAcceptRemoteIndex(false);
+                disabledDHT = true;
             }
         }
         else {
-            if (DiskSpace.isUsable())
+            if (DiskSpace.isUsable()) {
+               if (disabledDHT && getMemoryOK()) {
+                  log.logInfo("enabling index receive");
+                    sb.setConfig(SwitchboardConstants.INDEX_RECEIVE_ALLOW, true);
+                    sb.peers.mySeed().setFlagAcceptRemoteIndex(true);
+                    disabledDHT = false;
+               }
                 log.logInfo("run completed; everything in order");
+            }
             else
                 log.logInfo("The observer is out of order: " + DiskSpace.getErrorMessage());
         }


Besten Dank, sixcooler.
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm

Re: Res. Observer & Memory

Beitragvon Lotus » Fr Jan 08, 2010 12:51 pm

Danke für die guten Rückmeldungen.

sixcooler hat geschrieben:Warum wird der counter bei unterschreiten der Zeit (Zeile 199) zurückgesetzt?
Dieses wird ja ausgeführt wenn wenig Speicher in kürzeren Abständen vorkommt - warum soll das den Zähler zurücksetzen?

Die Funktion soll erst einmal ein, dass Kurzzeitige Speicherknappheit nicht zur Abschaltung führt.
Die Überlegung ist, dass wahrscheinlich genug Speicher vorhanden ist, wenn die Speicher-Spitze verschwindet. Deshalb wird der Zähler dann auch zurückgesetzt.

Kniffelig ist, dass der Speicher nur bestimmt wird (und werden kann), wenn er von den Methoden in YaCy schon für niedrig gehalten wird, und ein expliziter GC ausgeführt wird.
Ich habe auch schon einen Konzept-Test mit einem "Müll-"Observer-Objekt geamacht, bei dem der GC vom Finalizer gemeldet wird. Problematisch ist bei dieser Methode, dass das Objekt vielleicht schnell mit einem kleinem GC aufgeräumt wird und dann zu wenig freier Speicher ermittelt wird. Interessant wäre da eine parallele implementierung nur mit Log-Ausgabe in YaCy, nur zur Beobachtung.

Counter bei Neukonfiguration zurücksetzen ist eine gute Idee.

Der Grund, warum DHT nicht automatisch wieder eingeschaltet wird, liegt darin, dass die Installationsspezifische Konfiguration (Status vorher) dem Observer nicht bekannt ist. Das zieht einen großen Konzeptbedarf nach sich. Z.B. wenn der Nutzer, nachdem der Observer ausgelöst hat die Einstellungen ansieht, und sie als in Ordnung empfindet. Dann darf der Observer nicht wieder umstellen. Der Observer würde dann unerwünschte Einstellungen erzwingen. Abschalten betrachte ich insofern als gewünscht, weil es die Stabilität erhöht.
Ein wiedereinschalten bei doppelt verfügbarem (RAM) Speicher wäre jedoch zu begrüßen, weil der Observer dann grob falsch geschätzt hat.

Es gibt da eine Status-Meldung auf der Admin-Eingangsseite, die gucke ich mir nochmal an.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Res. Observer & Memory

Beitragvon sixcooler » Fr Jan 08, 2010 2:58 pm

Hallo,
Lotus hat geschrieben:Die Überlegung ist, dass wahrscheinlich genug Speicher vorhanden ist, wenn die Speicher-Spitze verschwindet. Deshalb wird der Zähler dann auch zurückgesetzt.

soweit verstehe ich das - nur was ist mit fällen wo sowohl in kurzen als auch langen abständen zu wenig speicher da ist?
Da es ja aber gut funktioniert - was mache ich mir da auch einen Kopf...

Lotus hat geschrieben:Der Grund, warum DHT nicht automatisch wieder eingeschaltet wird, liegt darin, dass die Installationsspezifische Konfiguration (Status vorher) dem Observer nicht bekannt ist. ...
...Ein wiedereinschalten bei doppelt verfügbarem (RAM) Speicher wäre jedoch zu begrüßen, weil der Observer dann grob falsch geschätzt hat.


Dazu hatte ich das 'boolean disabledDHT' gedacht - nur wenn der Observer das dht beendet aktiviert er es auch wieder.

Cu, sixcooler.
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm

Re: Res. Observer & Memory

Beitragvon Lotus » So Jan 10, 2010 8:09 pm

Ich habe nochmal darüber nachgedacht. Ist ja eigentlich ok wenn der Observer DHT wieder einschaltet, weil es vorher auch eingeschaltet war.
Deine Änderungen habe ich in 6562 so übernommen, und noch eine Status-Nachricht eingefügt.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Res. Observer & Memory

Beitragvon Vega » Mo Feb 01, 2010 3:19 pm

@Lotus und sixcooler

Schöne Sache die Ihr da gebaut habt, ich habe irgendwann auch das Problem das die Ressourcen auf meinen Servern zunehmend knapp werden, dann können wir das intensiv austesten. Was noch fehlt, ist die Funktion das bei (durch den Res. Observer) deaktivierten DHT-IN die globale Suche trotzdem möglich ist. Wenn ich DHT-IN in der Netzwerk-Konfig ausschalte wird das ja mit abgeschaltet. Das sollte umgangen werden, der Peer ist ja kein "Parasit" sondern einfach nur Ressourcen-mäßig am Ende.

Gruß,
Thomas
Vega
 
Beiträge: 824
Registriert: Mi Jun 27, 2007 3:34 pm
Wohnort: Dresden

Re: Res. Observer & Memory

Beitragvon Lotus » Di Feb 09, 2010 6:20 pm

Vega hat geschrieben:Was noch fehlt, ist die Funktion das bei (durch den Res. Observer) deaktivierten DHT-IN die globale Suche trotzdem möglich ist. Wenn ich DHT-IN in der Netzwerk-Konfig ausschalte wird das ja mit abgeschaltet. Das sollte umgangen werden, der Peer ist ja kein "Parasit" sondern einfach nur Ressourcen-mäßig am Ende.

In 6658 ist das nun eingebaut.
Ich hatte da auch bedenken, eine fertig kompilierte Backdoor anzubieten, aber der Observer funkt dazwischen und YaCy ist dann nur noch eingeschränkt benutzbar (keine Crawls).
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Res. Observer & Memory

Beitragvon sixcooler » Do Feb 11, 2010 4:31 pm

Nun wo mein peer mal wieder an diesem Punkt ist:

Supervielen Dank Lotus!
löppt wunderbar!

cu, sixcooler.
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm


Zurück zu Fragen und Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron