App hängt sich auf futex_wait_queue_me() alle ein paar Minuten

Ich bin mit einem einfachen Skript in Groovy auf einer Ubuntu-11.10-Maschine, nimmt die Schlüssel/Wert-Paare und fügt Sie zu einem JDBM map in einer Schleife.
Alle ~3 Minuten das Skript hängt für ein paar Minuten, und dann erneut.
Wenn ich mir im Ressourcenmonitor sehe ich, dass es keine CPU-oder Speicher-Aktivität und der Prozess ist in futex_wait_queue_me().

Schlagen Sie bitte ein Mittel, um dies zu überwinden, auf einer Windows-Maschine durch die Art und Weise der Anwendung läuft ohne Hänger.

Könnte das ein OS-Problem sein? (fand viele ähnliche threads zu ähnlichen futex_wait_queue_me() Probleme in Ubuntu0

Dank

  • Kann Sie bieten eine full thread dump des wartenden threads z.B. mit jstack ? (Sie können entfernen Sie diejenigen, die nicht) ich vermute, Sie werden immer von einem niedrigeren Niveau-dump und zu sehen gibt es sleeping-threads an, die normalen. Diese sind in der Regel ignoriert. Können Sie das Programm ausführen, mit -verbosegc ?
  • Hallo Peter, vielen Dank für die schnelle Antwort, nur um sicher zu sein, dass ich Ihnen Folgen richtig du meinst hinzufügen "-verbosegc" der java-Befehl richtig? Wie die Versorgung der thread-dump, einen screenshot vom Ressourcenmonitor?
  • Fügen Sie -verbosegc auf der Kommandozeile java. Es ist möglich, wenn Sie über wenig Speicher für einen GC zu nehmen Minuten statt von einem Bruchteil einer Sekunde. Um einen stack dump, verwenden Sie jstack und ignorieren/löschen, alle schlafenden threads. Wenn Sie nicht wissen, was sleeping-threads Aussehen, werfen Sie einen stack dump, wenn das Programm verhält sich normal und zeigen nur die threads, die anders sind. Sobald Sie eingegrenzt werden ein oder zwei threads, die sind anders, Sie können den text posten Sie Ihre Frage als ein code-block.
  • OK, es zu tun, kann einige Zeit dauern. Übrigens ich weiß nicht, was GC ist, aber bezüglich Speicher bin ich mit 16GiB ram und nur 10.3% verwendet.
  • Die GC ist der garbage collector. Der Standardwert für die maximale Größe des heap ist 25% des Speichers also, wenn Ihr nicht mit 25% das Programm gar nicht über seine maximale Größe. Eine Ursache für unerklärliche langen Pausen in Java 6 versucht-lookup der IP-Adressen von Hostnamen falsch konfiguriert, die in DNS. Das sollte weniger ein problem in den neuesten updates. Ich nur erwähnen, falls Ihr Ihnen etwas bedeuten.
  • Peter du hattest Recht es war ein problem mit der GC, ich habe die heap-Größe für eine große Zahl (<16 GB) und es funktionierte. Ich würde eher einen Weg finden, um die Ausbreitung der GC-Aktivität über die Zeit, und versuchen das spielen mit den verschiedenen Parametern, aber es sieht zu Komplex. Danke trotzdem für Eure Hilfe
  • Die Lösung ist nicht so Komplex, verwerfen, weniger Objekte. Abhängig von der Anwendung, Sie können es reduzieren, um weniger als einmal pro Tag (auch monior Sammlungen)

InformationsquelleAutor user971956 | 2012-03-21
Schreibe einen Kommentar