"Segmentation fault" Virtual Machine Konfiguration Großrechner?

sunny01

Aktives Mitglied
Hallo,

ich hoffe, ich bin hier richtig.

Folgendes Problem: Ich muss auf einem Großrechner, auf den ich nur per SSH Zugriff habe, ein Java-Programm laufen lassen, das als eine Art Webspider fungiert. Das Ganze ist natürlich relativ speicherintensiv. Ich bekomme nun bei etwa 6.000 Knoten (die Knoten sind die Links auf Unterseiten der Website, die jweils im Speicher gehalten werden bis eine Website intern komplett abgearbeitet ist) immer obenstehenden "Segmentation fault" Fehler.

Durch Googeln habe ich herausgefunden, dass es sich hierbei wahrscheinlich um ein Speicherzugriffsproblem handelt. Nun kann man ja mittels Parametern den Speicher für die Virtual Machine erhöhen (Xss, Xms, Xmx). Auch habe ich etwas gelesen von limit und ulimit unter Linux. Allerdings weiß ich jetzt nicht so recht, wie und was ich machen muss, um mein Problem zu lösen (habe weder mit Linux noch mit VM-Konfiguration, Konsole etc. Erfahrung).

Kann mir hier jemand weiterhelfen?
Weiß jemand, was ich (genau) machen muss, um den Fehler zu beseitigen?

Ich versuche ein paar Informationen über benannten Großrechner zur Verfügung zu stellen, weiß aber nciht so recht, was hier relevant ist, um die korrekten Einstellungen/Parameter für die Virtual Machine herauszubekommen. Leider kann ich nciht einfach "herumprobieren", da es ja immer ziemlich lang dauert, bis der Fehler dann irgendwann einmal kommt.


~$ cat /proc/version
Linux version 2.6.28-11-generic (buildd@crested) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) ) #42-Ubuntu SMP Fri Apr 17 01:58:03 UTC 2009

~$ cat /proc/meminfo
MemTotal: 65309840 kB
MemFree: 29487156 kB
Buffers: 384976 kB
Cached: 11008768 kB
SwapCached: 0 kB
Active: 26689504 kB
Inactive: 8771820 kB
Active(anon): 24073680 kB
Inactive(anon): 0 kB
Active(file): 2615824 kB
Inactive(file): 8771820 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2963952 kB
SwapFree: 2963952 kB
Dirty: 116 kB
Writeback: 0 kB
AnonPages: 24067480 kB
Mapped: 69684 kB
Slab: 235956 kB
SReclaimable: 205944 kB
SUnreclaim: 30012 kB
PageTables: 69540 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 35618872 kB
Committed_AS: 23683016 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 2004 kB
VmallocChunk: 34359735679 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 10584 kB
DirectMap2M: 67096576 kB

~$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)


Habe schon sehr viel gegoogelt aber finde nicht heraus was ich konkret tun kann ... ich hoffe jemand hier hat vielleicht Erfahrung mit solchen Dingen.

Liebe Grüße
sunny
 
M

maki

Gast
Was passiert, wenn du den Stack selber konfigurierst (zB. -Xss=8m)?

Kannst du vielleciht ein anderes, u.U. älteres JDK (parallel) installieren und damit nochmals testen?
 

sunny01

Aktives Mitglied
Also diese JConsole ist extrem langsam ... ist das normal? Wenn ich irgendeinen Reiter anklicke dauert das seeehr lang, bis irgendetwas passiert.
Und, wie kann ich, wenn ich die JConsole gestartet habe, dann noch mein JAR-File starten? Die Eingabeaufforderung kommt dann in der Konsole (von putty) nicht.
 

faetzminator

Gesperrter Benutzer
sunny01 hat gesagt.:
Ich habe dort "Remote Process:" angeklickt und dann den Hostnamen des Servers eingetragen sowie :9090 für den Port. Stimmt das nicht?
Du solltest nach [c]localhost[/c] bzw. [c]127.0.0.1[/c] verbinden können. Allerdings muss dein Programm bzw. die JVM dann natürlich laufen.

Und, wie kann ich, wenn ich die JConsole gestartet habe, dann noch mein JAR-File starten? Die Eingabeaufforderung kommt dann in der Konsole (von putty) nicht.

- mit [c]jconsole &[/c] den Prozess im Hintergrund starten
- oder zweites Putty öffnen
- oder [c]screen[/c] verwenden
- oder ...
 

sunny01

Aktives Mitglied
Du solltest nach [c]localhost[/c] bzw. [c]127.0.0.1[/c] verbinden können. Allerdings muss dein Programm bzw. die JVM dann natürlich laufen.

Ja, sorry, hatte da falsch herum gedacht ... hatte den Beitrag dann noch editiert.

- mit [c]jconsole &[/c] den Prozess im Hintergrund starten
- oder zweites Putty öffnen
- oder [c]screen[/c] verwenden
- oder ...

Super, danke! Hat funktioniert ... jetzt läuft JConsole und mein Programm.
Was soll ich jetzt am Besten beobachten? Die JConsole ist wirklich gaaaanz langsam ... da tut sich Sekunden bis Minuten gar nichts ...
 

sunny01

Aktives Mitglied
Also falls das was bringt ... so sieht die JConsole nach dem "Segmentation fault" aus:

jconsole.jpg


Lokal, wo dieser Fehler ja nie kam, sondern immer ein OutOfMemory läuft das Script noch ... wie gesagt, es ist bedeutend langsamer aufgrund der schwächeren Internetverbindung ... aber komischerweise kommt das Programm lokal "weiter" als auf dem Server, bis ein Fehler kommt ...
 

homer65

Top Contributor
Nach zuviel Memory Verbrauch sieht es also nicht aus. Das können wir jetzt ausschließen.
Dann bleibt nur noch ein richtiger Bug.
Bleibt also nur auf die neueste Version von Sun Java hochrüsten.
Und wenn der Fehler weiterhin kommt:
Bug Database
 

sunny01

Aktives Mitglied
Und an meinem stümperhaften Quelltext kann der Fehler auch nicht liegen?
Wegen einem Java-Update müsste ich wohl wieder mit dem Zuständigen für den Server sprechen ...

Es ist alles so komisch, zumal das Ganze bei mir am Rechner ja sogar länger bzw. tiefer läuft als auf dem Server ... dass bei mir am Rechner irgendwann der Speicher aus ist, kann ich mir schon vorstellen ... Aber auf dem Großrechner eben irgendwie auch nicht ...

Es scheint wohl aussichtslos ... :(
 

homer65

Top Contributor
Kopf hoch, aussichtslos ist es nicht.
Aber für solche Probleme gibt es in normalen Firmen eben Sysprogs, die sich drum kümmern.
Man muß nur mal mit den Leuten reden.
 

sunny01

Aktives Mitglied
Okay, dann versuche ich es nochmal ... der Kerl hat mich gestern schon "zur Sau" gemacht ... und ich bekomme immer nur Antworten wie "das geht sowieso nicht, lass es lokal laufen".
 

FArt

Top Contributor
Auffallend: die mittlere Säule vom Heap ist auf 100%... das ist der Survivor Space. Kann aber auch Zufall sein.

Normalerweise sollte jetzt eine GC einsetzten und die Objekte in die Tenured Generation verschieben.

Versuche mal ein wenig Tuning bzgl. GC Algorithmen (z.B. parallele GC, siehe Java HotSpot VM Options

Noch ein paar Tipps in der Richtung:
Java Tuning White Paper

Zeige doch mal den Verlauf der einzelnen Heap-Spaces.
 

homer65

Top Contributor
Ein Punkt (ist natürlich nur eine Idee mehr nicht) der mich stört ist:
Code:
 public static HypertextTree htt = new HypertextTree();
Kannst du nicht deinen Code in eine zweite Klasse auslagern und nur die main Methode in der ersten Klasse belassen, so das du dieses unschöne (mir fehlen die passenden Worte) Konstrukt los wirst.
Aber wie gesagt, das ist ins Blaue geraten.
 

sunny01

Aktives Mitglied
Auffallend: die mittlere Säule vom Heap ist auf 100%... das ist der Survivor Space. Kann aber auch Zufall sein.

Das ist aber immer so. Selbst wenn ich mein Programm noch gar nicht gestartet habe.

Versuche mal ein wenig Tuning bzgl. GC Algorithmen (z.B. parallele GC, siehe Java HotSpot VM Options

Noch ein paar Tipps in der Richtung:
Java Tuning White Paper

Oh mann ...

Zeige doch mal den Verlauf der einzelnen Heap-Spaces.

Wie mache ich das? Wenn ich auf das Dropdown von "Chart" klicke, muss ich erstmal über eine Minute warten, bis sich überhaupt die Auswahlliste öffnet. Aber falls es das ist, was Du meinst, hier die verschiedenen Heaps-Spaces auszuwählen, dann werde ich das jetzt mal versuchen.
 

FArt

Top Contributor
Du kannst auf eine der Säulen klicken... also die mittlere...

Dass das bei dir immer so ist, ist auf jeden Fall ungewöhnlich... aber ob das ein Problem ist ???
 

sunny01

Aktives Mitglied
Ein Punkt (ist natürlich nur eine Idee mehr nicht) der mich stört ist:
Code:
 public static HypertextTree htt = new HypertextTree();
Kannst du nicht deinen Code in eine zweite Klasse auslagern und nur die main Methode in der ersten Klasse belassen, so das du dieses unschöne (mir fehlen die passenden Worte) Konstrukt los wirst.
Aber wie gesagt, das ist ins Blaue geraten.

Jetzt sieht es so aus:

Code:
public class HTT {
    public static void main(String[] args) {
        HTAdjMatrix htam = new HTAdjMatrix();
        htam.start();
    }
}

Und in HTAdjMatrix ist der gesamte Rest.

Habs nochmal am Server gestartet.
 

sunny01

Aktives Mitglied
Du kannst auf eine der Säulen klicken... also die mittlere...

Dass das bei dir immer so ist, ist auf jeden Fall ungewöhnlich... aber ob das ein Problem ist ???

jconsole.jpg


Warum das immer so ist, weiß ich auch nicht. Kann es passieren, dass so ein Programm noch weiterläuft, irgendwie, irgendwo!? Also nach dem Segmentation fault? Aber es kommt dann dann einfach wieder das Eingabezeichen der Konsole. Dann müsste es doch beendet sein, das Programm.
 

faetzminator

Gesperrter Benutzer
Mit [c]ps[/c] kannst du auf der Konsole die laufenden Prozesse ausgeben. Sieh dir dazu [c]ps -?[/c] oder [c]man ps[/c] an. Allerdings denke ich, dass da kein Prozess mehr läuft.
 

sunny01

Aktives Mitglied

Stimmt ... und ich habe nur auf die Datei zum Auslesen der Linkliste geachtet, nicht auf den BufferedReader, der den Sourcecode der Webseiten einliest. Hab' das jetzt geändert ... und nochmal gestartet.

Mit ps kannst du auf der Konsole die laufenden Prozesse ausgeben. Sieh dir dazu ps -? oder man ps an. Allerdings denke ich, dass da kein Prozess mehr läuft.

Nein, läuft nur der eine ...
 

fastjack

Top Contributor
Stell doch mal lokal bei dir dieselbe Situation dar und probiere das Programm dann auf dem lokalen Rechner (mit echten Daten, Dateien die Du vorher kopiert hast) nach.
 

sunny01

Aktives Mitglied
jconsole.jpg


Warum das immer so ist, weiß ich auch nicht. Kann es passieren, dass so ein Programm noch weiterläuft, irgendwie, irgendwo!? Also nach dem Segmentation fault? Aber es kommt dann dann einfach wieder das Eingabezeichen der Konsole. Dann müsste es doch beendet sein, das Programm.

Interessanterweise ist es auf dem Screenshot, den ich gepostet habe, ja gar nicht so. Also doch nicht immer so. Ich bin schon ganz durcheinander. Mir war nur einmal aufgefallen, dass schon beim Öffnen der JConsole, noch bevor ich mein Programm gestartet hab, der mittlere Balken auf fast 100 % war ... aber vielleicht bin ich jetzt auch schon völlig verrückt.
 

sunny01

Aktives Mitglied
Stell doch mal lokal bei dir dieselbe Situation dar und probiere das Programm dann auf dem lokalen Rechner (mit echten Daten, Dateien die Du vorher kopiert hast) nach.

Das habe ich heute schon gemacht. Habe auch gepostet, dass ich das Programm lokal nochmal starte (mit denselben Gegebenheiten wie am Server). Ich habe dann wieder bei ~ Knoten 10.000 manuell abgebrochen, weil es lokal einfach langsam läuft und ewig lang dauert ... Fehler kommt aber keiner.
 

sunny01

Aktives Mitglied
Ich hab doch schon mehrmals gesagt dass es lokal läuft ... aber so langsam, dass es mir nichts bringt, weil eine Website fast einen ganzen Tag braucht bzw. nach einem ganzen Tag immer noch fertig durchgearbeitet ist, ich muss aber 500 auslesen, und das bis nächste Woche. Daher habe ich jedes Mal bei etwa 10.000 ausgelesenen Seiten abgebrochen ... das waren dann meist schon um die 8 h ... so komme ich nicht weiter.

Meine Internetverbindung lokal ist einfach zu langsam, es wird ja auf jede Unterseite eine URLConnection erstellt, um von dort wieder die Links auslesen zu können. Lokal dauert das, aufsummiert, leider ewig. Dass es lokal funktioniert hilft mir also absolut nicht weiter.

:(

PS: Anfangs hatte ich allerdings lokal auch Speicherprobleme ... ich muss beim Starten auch die VM-Parameter mitgeben, damit es bis 10.000 Knoten läuft ...
 

sunny01

Aktives Mitglied
Bin leider nicht so gut in Java.
Sehe aber den größten Flaschenhals an der Internetverbindung ... das ist einfach das, was Zeit benötigt. Ich habe hier nur Wireless ... der Server hat eine weiß-ich-wieviele-MBit-Standleitung.

Die Schleifendurchläufe werden wahrscheinlich am Server auch schneller sein, das ist klar ... aber ohne Schleife wüsste ich nicht, wie ich das programmieren soll. Auch habe ich nicht mehr viel Zeit, alles neu zu programmieren, selbst wenn ich eine Idee hätte, wie man es besser machen kann. Das kann man nämlich mit Sicherheit, ich habe nicht viel Erfahrung mit Java.
 

sunny01

Aktives Mitglied
Ich habs ganz vorne schonmal geschrieben ... es soll pro Website ein Graph erstellt werden, der die interne Verlinkung wiedergibt. Den Graphen repräsentiere ich einfach als Adjazenzmatrix.

Damit ich aber diese erstellen kann, muss ich immer wissen, welche Links ich schon "kenne", und welche neu sind. Wenn ich den Link schon "kenne", dann muss ich auch seine ID herausfinden, damit ich ihn mit dem aktuellen Knoten "verknüpfen" kann.

Es soll dann eben ein gerichteter Graph hehrauskommen, in dem die Knoten alle Unterseiten einer Website sind, und die Kanten die jweiligen Verbindungen zwischen ihnen, also die Hyperlinks.

Ich speichere zuerst alles in Adjazenzlisten, und generiere dann am Schluss aus der Adjazenzliste die Adjazenzmatrix. Die Adjazenzliste muss eben während des Durchsuchens einer Website im Speicher gehalten werden (DBs sollen nicht verwendet werden) ... kann mir nicht vorstellen, wie das sonst funktionieren soll ...
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Ok, auch wenns schonmal gesgat wurde. Bei solchen Vorhaben sollte man eine maximale Rekursionstiefe angeben, da man ansonsten ganz schnell mal das Internet herunterlädt :)
Ich habe dein Programm mal auf die Google-Eingabeseite laufen lassen und er hat schon über 300 Links gefunden (ohne die Suche aktiviert zu haben)...
 

sunny01

Aktives Mitglied
Was hast Du denn da für links gefunden?

Ich lasse mir die Links zur Zeit immer alle mitausgeben, die besucht werden, und sie befinden sich immer in derselben Domain und sind auch die, die wirklich verfolgt werden sollen. Außerhalb der Domain darf nichts abgegrast werden, sonst hab ich am Ende wirklich das ganze Internet geladen ...
 

fastjack

Top Contributor
425: http://www.google.de/intl/de/mobile/navigation/search-along-route.jpg
426: http://www.google.de/intl/de/mobile/navigation/satellite-view.jpg
427: http://www.google.de/intl/de/mobile/navigation/car-dock.jpg
428: http://www.google.de/intl/de/mobile/navigation/shortcut.jpg
429: http://www.google.de/intl/de/mobile/google-mobile-app/gma-iphone-search-by-voice-working.jpg
430: http://www.google.de/intl/de/mobile/google-mobile-app/mylocation.jpg
431: http://www.google.de/intl/de/mobile/google-mobile-app/googlesuggest.jpg
432: http://www.google.de/intl/de/mobile/google-mobile-app/searchhistory.jpg
433: http://www.google.de/intl/de/mobile/google-mobile-app/emailsearch.jpg
434: http://www.google.de/intl/de/mobile/google-mobile-app/contactsearch.jpg
435: http://www.google.de/intl/de/mobile/google-mobile-app/verticalsearch.jpg
436: http://www.google.de/intl/de/mobile/google-mobile-app/links.jpg
437: Google Mobile
438: Ihren Content bermitteln
439: Google-Pressezentrum
440: Google-Pressezentrum
441: Google-Pressezentrum
442: Pressezentrum - FIFA.com und Google unterstützen Fans beim Feiern der Fußball-WM 2010
443: Pressezentrum - Guggenheim-Museum und YouTube suchen das weltweit kreativste Online-Video
444: Pressezentrum - Statement zu der Kritik der Datenschutzbeauftragten, dass Google Wi-Fi-Daten erfasst
445: Life at Google - Germany jobs - Google
446: Explore our offices - Germany jobs - Google
447: Joining Google - Germany jobs - Google
448: Düsseldorf Advertising Sales & Customer Support - Germany jobs - Google
449: Frankfurt Advertising Sales & Customer Support - Germany jobs - Google
450: Hamburg Advertising Sales & Customer Support - Germany jobs - Google

in links.txt ist ein Eintrag Google
 

sunny01

Aktives Mitglied
Ja das ist mir auch schon aufgefallen ...

Das ist doch mein eigentliches Problem weshalb ich hier bin ... auf dem Server läuft ja alles nur bis ungefähr 6.000 Unterseiten und ich weiß nicht warum ... und auf meinem Computer zu Hause dauert es zu lange.
 

FArt

Top Contributor
Code:
public class TestMe  {

  public static int MAX = 10000;

  public void testMe() throws Exception {
    testMe(1);
  }

  private void testMe(int i) throws Exception {
    if (i == MAX)
      return;
    {
      URL url = new URL("http://www.google.de");
      URLConnection con = url.openConnection();
      BufferedReader br = new MyBufferedReader(new InputStreamReader(con.getInputStream()));
      System.out.println(i);
//      br.close();
//      br = null;
    }
    testMe(i + 1);
  }

  private static class MyBufferedReader extends BufferedReader {

    MyBufferedReader(InputStreamReader isr) {
      super(isr);
    }

    public void finalize() throws Throwable {
      super.finalize();
      System.out.println("********** Collected Reader ***********");
    }

  }

  public static void main(String[] args) throws Exception {
    new TestMe().testMe();
  }

}

Das gibt einen OutOfMemory. Der Reader wird wohl nicht collected. Mit close() und nullen schon...

Und baue die Rekursion aus...
 

fastjack

Top Contributor
Bei Passagen, in denen du nach einem Element suchst, ob es schon vorhanden ist, iterierst Du durch eine immer größer werdende Liste. Das kostet Zeit, da hilft unter Umständen eine Map, in der Du die Einträge speichert und einfach mit contains() prüfst, ob es ein Element gibt dazu gibt.
Ich schau mal, ob ich noch mehr finde ...
 

sunny01

Aktives Mitglied
Aber das mit dem fehlenden close() vom BufferedReader habe ich ja schon behoben. Oder was meinst Du genau.

Das mit der Map habe ich mir auch schon gedacht, allerdings glaube ich nicht, dass es daran liegt, dass am Server die Iteration zu viel wird ... weil es ja sogar bei mir lokal am Rechner länger läuft als am Großrechner. Der Aufwand das Suchen des Knotens umzuprogrammieren wird nicht lohnen, weil der Segmentation fault bestimmt trotzdem kommt.
 
Zuletzt bearbeitet:

sunny01

Aktives Mitglied
Und dann programmiere ich da jetzt ewig lange herum (Maps habe ich noch nie implementiert, kenne ich mich überhaupt nicht damit aus) und danach funktioniert es auch nicht viel schneller, weil es einfach an meiner Internetverbindung liegt, und dann habe ich auch keine Zeit mehr, den Fehler am Server zu finden. Auch mit Maps wird das Programm nicht in einem Tag 500 große Websiten durcharbeiten können. Da bin ich sicher.
Am Wochenende ist dann auch niemand da, der irgendwas am Server umstellen könnte, falls das was helfen würde. Dann habe ich komplett verloren wenn es morgen nicht auf meinem lokalen Rechner so schnell läuft, dass übers WE alle 500 Seiten heruntergeladen sind. Das ist doch unmöglich.

Ich weiß nicht mehr weiter. Langsam denke ich schon fast ans Aufgeben.
 

FArt

Top Contributor
Aber das mit dem fehlenden close() vom BufferedReader habe ich ja schon behoben. Oder was meinst Du genau.

Das mit der Map habe ich mir auch schon gedacht, allerdings glaube ich nicht, dass es daran liegt, dass am Server die Iteration zu viel wird ... weil es ja sogar bei mir lokal am Rechner länger läuft als am Großrechner. Der Aufwand das Suchen des Knotens umzuprogrammieren wird nicht lohnen, weil der Segmentation fault bestimmt trotzdem kommt.

Wie soll ich die Rekursion komplett rausbringen? Das wird dann extrem umständlich mit noch mehr Iterationen, kann ich mir grad nicht richtig vorstellen.

Ich muss mir mal in einer ruhigen Minute darüber Gedanken machen was da genau schief läuft.

Probier das Testprogramm ruhig aus. Nur der close() reicht noch nicht, du musst die Referenz auch auf null setzen, damit der GC den Reader rechtzeitig abräumt.
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Das stimmt natürlich, daß bezog sich auch nur auf die eigentliche Verarbeitungsgeschwindigkeit. Der größte Zeitfresser ist aber sowieso das Lesen aus der Verbindung. Hast Du die Exception mal alle eingeblendet, also die e.printStackTraces() überall ? Kannst Du sie posten ?
 

FArt

Top Contributor
Stimmt nicht. Das Testprogramm entpsricht nicht deinem Programm. Der Scope für den Reader ist hier falsch gewählt. In deinem Fall müsste er collected werden. Jetzt passt auch meine Theorie wieder.. und dein Problem ist noch da.

Baue die Rekursion aus ;-)
 

fastjack

Top Contributor
Mir ist noch eingefallen, wir hatten auf einer SPARC-Maschine mit 16GIG, FreeBsd und 64bit Diablo Java, ein ähnliches Problem. Schuld daran war ein defekter Speicherriegel. Wir haben bei jedem Programmstart ein Stück defekten Speicher bekommen, bei erschiedensten Memore-Einstellungen. Sysop hat die Riegel nacheinander einzeln und wieder eingesteckt, bis es lief und er den defekten hatte.
 

sunny01

Aktives Mitglied
Das stimmt natürlich, daß bezog sich auch nur auf die eigentliche Verarbeitungsgeschwindigkeit. Der größte Zeitfresser ist aber sowieso das Lesen aus der Verbindung. Hast Du die Exception mal alle eingeblendet, also die e.printStackTraces() überall ? Kannst Du sie posten ?

Exceptions treten eigentlich nur bei toten Links auf und sehen dann folgendermaßen aus:

Code:
java.io.FileNotFoundException: http://www.xxx.com/yyy/zzz.html
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1368)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1362)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1016)
 
Zuletzt bearbeitet:

FArt

Top Contributor
Nachtrag:
so passt der Scope des Readers.. und der GC macht alles gut...
Code:
  private void testMe(int i) throws Exception {
    if (i == MAX)
      return;
    if (i < MAX){ // logisch unnötig, aber der Scope des Readers ist wichtig...
      URL url = new URL("http://localhost:8080");
      URLConnection con = url.openConnection();
      BufferedReader br = new MyBufferedReader(new InputStreamReader(con.getInputStream()));
      System.out.println(i);
    }
    testMe(i + 1);
  }
 

sunny01

Aktives Mitglied
Mir ist noch eingefallen, wir hatten auf einer SPARC-Maschine mit 16GIG, FreeBsd und 64bit Diablo Java, ein ähnliches Problem. Schuld daran war ein defekter Speicherriegel. Wir haben bei jedem Programmstart ein Stück defekten Speicher bekommen, bei erschiedensten Memore-Einstellungen. Sysop hat die Riegel nacheinander einzeln und wieder eingesteckt, bis es lief und er den defekten hatte.

Aber wenn es an kaputtem Speicher läge, dann würde doch nicht immer zum ungefähr selben Zeitpunkt im Ablauf des Programms der Fehler kommen ... oder?
 

Ähnliche Java Themen

Neue Themen


Oben