SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

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.

SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Quix0r » Fr Jan 22, 2010 12:55 pm

Diese Meldung kommt, obwohl der lokale Crawler-Queue >600.000 Eintraege gross ist (limited aka. global crawler queue ist >4.000.000 Eintraege gross). Zudem faellt mir die weiterhin langsame Geschwindigkeit auf, obwohl Max. 600 PPM gesetzt ist

Das kann doch nicht angehen, dass alle 600.000 URLs aus irgent einem Grund gebremst wurden, weil es zu viele Zugriffe pro Sekunde gleichzeitig waeren oder weil die robots.txt dass bei allen >600.000 URLs so will? :? Derzeit ist der Peer als private Node (Robinson) betrieben.

Hier ein Bild dazu:

Bitte, Orbiter. Ich weiss, was du mir sagtest, aber das kann einfach hier nicht stimmen! Da muss wo ein Bug sein...

Edit: Ich habe mal mit netstat nachgesehen: TIME_WAIT ganz viele. :( Ensprechend ist auch http://localhost:8080/Connections_p.html praken voll. :(

Edit2: Nein, TIME_WAIT war ein anderes Programm. Sorry. Die Liste in Connections_p.html ist nach Neustart von YaCy und reset (ifconfig eth0 down; rmmod r8169; usw.) der Netzwerkverbindung wieder komplett voll.

Auffallend: Ausschliesslich Redirect-URLs (mal wieder "Adult-Entertainment-Seiten", nach Orbiter) die auf eine ungueltige URI fuehren. Ein Beispiel:

GET /st/st.php?t=66827&script=1&url=http:/www.some-url.invalid/bbn/g-bn-1052e/tf.html&p=60

Da fehlt das zweite Slash nach dem http:. Kann das mal getestet werden? Einen Redirect ausprobieren, der auf eine ungueltige URI verweisst? Oder bin ich auf dem Holzweg?

Edit3: Queue-Groessen: Lokal > 700.000, Limit=Global > 4.500.000

Edit4: Queue-Groessen: Lokal > 1.000.000, Limit=Global > 4.300.000 - Entsprechend auch viele der "shifted" Nachrichtichten im Logfile. Der Thread-Dump zeigt aber keine blockierende Threads an.

Edit5: Haengt eventueller diese "java.lang.IllegalArgumentException: Host name may not be null" Meldung damit zusammen?
Dateianhänge
dump.log.bz2
Thread-Dump 100-fach
(2.96 KiB) 53-mal heruntergeladen
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Quix0r » So Jan 31, 2010 2:10 pm

Ist noch immer akut, ausgehende Verbindungen sind > 170. "netstat -anp | grep java" zeigt dies auch an, sehr viele auf CLOSE_WAIT.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Lotus » So Jan 31, 2010 8:28 pm

Also ich habe hier bei Standardeinstellungen und 700-900ppm ca. 100 Verbindungen, allerdings anders gemessen: "netstat -s | grep established".
Wo ist hier eigentlich gerade das Problem? Bei vielen neuen Hosts muss auch noch ein DNS-lookup gemacht werden. Kaputte Links sind halt kaputt, dann werden sie nicht verfolgt.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Quix0r » So Jan 31, 2010 8:43 pm

Das Problem sind hier die URLs wie oben mit dem einem Slash. Also http:/www.foo, aber es sollte http://www.foo heissen.

Mir fiel es halt auf, dass ich viele ausgehende Verbindungen (im YaCy-Interface) hatte, die eine Redirect-URL auf http:/some-foo-url hatten. Daher meine Vermutung, dass es hier vielleicht "klemmt". Ich werde mal versuchen, im Quellcode die Stelle zu finden, wo er Redirects verfolgt.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Quix0r » Mo Mär 29, 2010 4:13 am

Back to topic. Genau dieses Verhalten hat YaCy im Robison-Mode runtergebremst. Dazu hier ein Patch zur Veranschaulichung:
Code: Alles auswählen
Index: source/de/anomic/crawler/CrawlQueues.java
===================================================================
--- source/de/anomic/crawler/CrawlQueues.java   (revision 6785)
+++ source/de/anomic/crawler/CrawlQueues.java   (working copy)
@@ -191,13 +191,16 @@
     
     public boolean coreCrawlJob() {
         
+        /*
         final boolean robinsonPrivateCase = ((sb.isRobinsonMode()) &&
                 (!sb.getConfig(SwitchboardConstants.CLUSTER_MODE, "").equals(SwitchboardConstants.CLUSTER_MODE_PUBLIC_CLUSTER)) &&
                 (!sb.getConfig(SwitchboardConstants.CLUSTER_MODE, "").equals(SwitchboardConstants.CLUSTER_MODE_PRIVATE_CLUSTER)));
         
-        if (((robinsonPrivateCase) || (coreCrawlJobSize() <= 20)) && (limitCrawlJobSize() > 0)) {
+        */
+        //if (((robinsonPrivateCase) || (coreCrawlJobSize() <= 20)) && (limitCrawlJobSize() > 0)) {
+        if ((coreCrawlJobSize() <= 20) && (limitCrawlJobSize() > 0)) {
             // move some tasks to the core crawl job so we have something to do
-            final int toshift = Math.min(10, limitCrawlJobSize()); // this cannot be a big number because the balancer makes a forced waiting if it cannot balance
+            final int toshift = Math.min(5, limitCrawlJobSize()); // this cannot be a big number because the balancer makes a forced waiting if it cannot balance
             for (int i = 0; i < toshift; i++) {
                 noticeURL.shift(NoticedURL.STACK_TYPE_LIMIT, NoticedURL.STACK_TYPE_CORE, sb.crawler.profilesActiveCrawls);
             }

Was ich letztendlich geaendert habe, ist dass ich den linken ODER-Teil (robinsonPrivateCase) rausgeworfen und die Anzahl (diese nur testweise) reduziert habe, um weniger IO-Last zu erzeugen. Den rauskommentierten Code habe ich nur fuer mich lokal gemacht, bitte dann wenn ihr das committet, rauslassen. (Bloss nicht mit zu viel altem Code belasten.)

Dazu zwei Vergleichsgrafiken:
Bild
Ohne Patch (alter Code)

Bild
Mit meinem Patch

Bild
Mit meinem Patch #2

Nun habe ich aber eine Verstaendnisfrage dazu: Wieso muessen Eintraege verschoben werden, denn der Robinson-Mode aktiv ist und der Peer private bzw. oeffentlich ist oder wenn zu wenig im Core-Crawler-Stack (Methode coreCrawlJobSize()) und noch genuegend im Limit-Crawler-Stack (Methode limitCrawlJobSize()) sind? Eigentlich wuerde doch vollkommen ausreichen, zu ueberpruefen, ob noch Eintraege im Limit-Crawler noch vorhanden sind und ob der Stack vom Core-Crawler fast leer ist?

Dann erscheint mir die 20 als etwas zu klein, falls mal stark gecrawlt wird. Bei z.B. 1500 PPM sind die 10 (bzw. meine 5 sind da eher noch weniger) zusaetzlichen Crawl-Jobs doch blitzartig weggecrawlt - ich gehe hier davon aus, dass die 10/5 Jobs alle unterschiedliche URLs sind? Kann hier nicht die 20 gegen "1.5 mal aktuelle PPM" ausgetauscht werden? Hier mal ein Pseudo-Code zur Veranschaulichung:
Code: Alles auswählen
if ((coreCrawlJobSize() <= (1.5 * SomeCoreClass.determineActualPagesPerMinute()) && (limitCrawlJobSize() > 0)) {

Dann muesste immer genuegend + 0.5 Buffer vorhanden sein, falls mal schneller gecrawlt wird und wenn weniger gecrawlt wird, ist doch dann auch nicht so schlimm. :) Okay, die zu transferierende Job-Menge von Limit nach Core muesste dann auch genauso dynamisch angepasst werden, was zu mehr IO-Last jedoch fuehrt.

Mein Traum waere ein an das System angepasstes Verhalten: Ist die Festplatte/RAID leistungsstark, dann den dynamischen Code, anderfalls die statischen Werte annehmen, da sonst die Festplatte/RAID zu stark belastet ist. Entscheiden koennte das erstmal der User, soll er doch ausprobieren. :)
Zuletzt geändert von Quix0r am Di Mär 30, 2010 2:23 am, insgesamt 1-mal geändert.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Orbiter » Mo Mär 29, 2010 1:14 pm

die limit-crawls werden im robinson-modus verschoben weil sie sonst niemand bearbeiten wird. Sie dort liegen zu lassen wäre eine Verschiebung der Abarbeitung auf den Fall dass der lokale Crawl durch ist. Sehe keinen Sinn darin.
Orbiter
 
Beiträge: 5792
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: SVN 6610: "CRAWLER shifted 10 jobs" und volle Queue...

Beitragvon Quix0r » Mo Mär 29, 2010 1:40 pm

Du redest in Raetseln...

Orbiter hat geschrieben:die limit-crawls werden im robinson-modus verschoben weil sie sonst niemand bearbeiten wird.

Okay, das leuchtet ein.

Orbiter hat geschrieben:Sie dort liegen zu lassen wäre eine Verschiebung der Abarbeitung auf den Fall dass der lokale Crawl durch ist.

Was meinst du mit "dort", im Limit- oder im Core-Crawler? Sollte der lokale Crawl durch sein, werden also welche aus dem Limit nachgeschoben, solange Jobs im Limit-Crawler vorhanden sind. So ist jetzt die Logik in meinem Patch. Bei deiner Logik (aktuell im trunk) wuerden welche verschoben werden, wenn der Peer im Robinson-Modus ist und weder ein privater noch ein oeffentlicher Peer ist, also Public Cluster .

Dazu hier die Code-Logik:
Code: Alles auswählen
         final boolean robinsonPrivateCase = ((sb.isRobinsonMode()) &&
                 (!sb.getConfig(SwitchboardConstants.CLUSTER_MODE, "").equals(SwitchboardConstants.CLUSTER_MODE_PUBLIC_CLUSTER)) &&
                 (!sb.getConfig(SwitchboardConstants.CLUSTER_MODE, "").equals(SwitchboardConstants.CLUSTER_MODE_PRIVATE_CLUSTER)));

Mit aktueller Logik aus dem trunk ist die folgende if-Abfrage immer true:
Code: Alles auswählen
if (((robinsonPrivateCase) || (coreCrawlJobSize() <= 20)) && (limitCrawlJobSize() > 0)) {

Das ist aus den Logbuechern ersichtlich, da staendig Crawl-Jobs nachgeschoben werden. coreCrawlJobSize() ist hiebei - auch aus dem Logbuch ersichtlich und aus dem Web-Interface genauso - niemals <= 20, sondern irgentwas mit weit ueber 3.000.000 (!), somit ist der Teilausdruck "coreCrawlJobSize() <= 20" false. "limitCrawlJobSize() > 0" ist true, was auch aus dem Logfile ersichtlich ist. Da ich aber nun sagte, dass staendig Crawl-Jobs nachgeschoben werden, was den Crawler wohl offensichtlich (siehe beide Performance-Grafiken) lahm legt, muss somit rein logisch betrachtet "robinsonPrivateCase" auf true sehen und das jedes Mal, da ich ja bekanntermassen nicht im Sekundentakt die Netzwerkkonfiguration aendere.

Hatte ich sie aber mal z.B. auf P2P-Mode geaendert, ist folglich "robinsonPrivateCase" false und somit der ganze if-Ausdruck false (wegen des UND). Folglich war auch der Crawler nicht durch das Verschieben von Crawl-Jobs ausgebremst und konnte "loslegen" (also Crawlen, dass die Leitung glueht).

Orbiter hat geschrieben:Sehe keinen Sinn darin.

Diesen sehe ich in der aktuellen Logik - ohne dich angreifen zu wollen versteht sich - nicht. Weil, wie bereits oben beschrieben, im Robinson-Mode die Crawls massenhaft aber immer wieder in sehr kleinen Haebchen verschoben werden, was wohl viel IO kostet. Meine beschrieben Logik hingegen entlastet die Festplatte - da nicht staendig verschoben wird, sondern nur wenn es noetig ist. Und genau das macht sich hier gerade neben mir bemerkbar: Deutlich besserer Crawl und kaum IO-Ballast durch Verschieben von Crawl-Jobs. :) Meine Stacks sind schliesslich nicht die kleinsten... ;)

Dazu faellt mir gerade das KISS-Prinzip ein... :)

Hier mal eine "ls -l" Ausgabe:
Code: Alles auswählen
quix0r@quix0r:~/yacy$ ls -l DATA/INDEX/freeworld/QUEUES/
total 10143192
-rw-r--r-- 1 quix0r quix0r      83048 2010-06-05 01:49 crawlProfilesActive.heap
-rw-r--r-- 1 quix0r quix0r          0 2010-06-04 23:12 crawlProfilesPassive.heap
-rw-r--r-- 1 quix0r quix0r   14221253 2010-02-20 16:52 crawlRobotsTxt.heap
-rw-r--r-- 1 quix0r quix0r    8859942 2010-06-05 01:49 urlDelegated3.db
-rw-r--r-- 1 quix0r quix0r    7529328 2010-06-05 01:49 urlError3.db
-rw-r--r-- 1 quix0r quix0r 4514772358 2010-06-05 01:49 urlNoticeCoreStack9.db
-rw-r--r-- 1 quix0r quix0r 5825149000 2010-06-05 01:48 urlNoticeLimitStack9.db
-rw-r--r-- 1 quix0r quix0r          0 2010-05-23 02:15 urlNoticeRemoteStack9.db
-rw-r--r-- 1 quix0r quix0r   15960742 2010-06-04 23:12 webStructure.map
quix0r@quix0r:~/yacy$
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld


Zurück zu Fragen und Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast