2012-06-12 9 views
13

Mam problem z przestrzenią sterty. Mój program jest prosty. Istnieje dwóch aktorów (wyślij & otrzymywać) "send" aktor przekazuje 10000 obiektów na sekundę do "odbioru", a otrzyma publikuje te obiekty. Odbierany obiekt odbiorcy jest zapisywany w kontenerze, ale kontener jest opróżniany co sekundę. Więc nie ma szans, że w pojemniku zabraknie miejsca. Teraz po 420000 obiektach moje zaćmienia buty błąd mówiąc: "Updater ioconsole napotkał problem". I kiedy wchodzę w szczegóły widzę błąd Błąd wewnętrzny :: Java przestrzeń stertyKończy się przestrzeń sterty

Próbowałem zwiększyć rozmiar sterty. Rozmiar mojego sterty wynosi 8096m, a maksymalizacja rozmiaru to 4096

Monitoruję mój kod za pomocą visualVm i zauważam, że nie przekracza on całego rozmiaru sterty. Całkowicie puste, jak rozwiązać problem.

Czy ktoś może mi powiedzieć, jakie inne możliwe scenariusze mogą prowadzić do takich błędów.

Odpowiedz

35

IOConsole to klasa zaćmienia, a nie program. Czy często drukujesz do System.out? W oknie> Preferencje wyszukaj "konsola". Ustaw jakiś limit dla wszystkich buforów konsoli. Spróbuj wydrukować mniejszą ilość danych z programu. Może zamiast tego zaloguj się do pliku.

+0

Tak, nie mogłem znaleźć linii printf, ponieważ zostało to wykonane przez plik lagback.xml. W wyniku zmiany statusu w tym pliku linie dziennika uległy zmniejszeniu, a błąd został zmniejszony. Wielkie dzięki .. – Rags

+0

odznaczenie "Fixed Width Console" rozwiązało moje ... – KillBill

5

Można dodać następujące JVM args dać wyobrażenie o wykorzystaniu pamięci i co robi GC:

-Xloggc:/tmp/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 
3

Problem ten wystąpił ze względu na wielkość bufora w konsoli.

Rozwiązanie:

Right Click konsoli -> Preferencje

graniczne konsoli.

0

Wystąpił problem i próbowałem go rozwiązać, zmieniając ustawienia sterty i bufora w środowisku Zaćmienie. Jednak nie mogłem go rozwiązać. Następnie zauważyłem, że w moim programie występuje wyciek pamięci, a liczba wątków rośnie w czasie. Problem został rozwiązany po naprawieniu błędu. Myślę, że wyciek pamięci nie jest najbardziej prawdopodobną przyczyną, ale należy wziąć pod uwagę.