Mam składnik innej firmy, który próbuje wysłać zbyt wiele wiadomości UDP na zbyt wiele oddzielnych adresów w określonej sytuacji. Jest to seria, która ma miejsce, gdy oprogramowanie jest uruchamiane, a sytuacja jest tymczasowa. W rzeczywistości nie jestem pewien, czy chodzi o zwykłą ilość wiadomości, czy o to, że każdy z nich przechodzi na osobny adres IP.Wyjątek Java IOException: Brak przestrzeni buforowej podczas wysyłania pakietów UDP w systemie Linux
W każdym razie zmiana odpowiedniego protokołu lub problematycznego komponentu nie jest opcją, dlatego szukam obejścia. StackTrace wygląda następująco:
java.io.IOException: No buffer space available
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
Ten problem występuje (co najmniej) z wersji Java 1.6.0_13 i 1.6.0_10 i wersji Linux Ubuntu 9.04 i RHEL 4.6.
Czy są jakieś właściwości systemu Java lub poprawki konfiguracji systemu Linux, które mogą pomóc?
Dzięki. Oprócz tych parametrów, starałem się również poprawić net.ipv4.udp_mem i net.ipv4.udp_wmem_min. Najpierw podwoiłem wartości, a następnie podwoiłem je ponownie iw końcu zmieniłem je na 10 razy większe niż domyślne. Nic jednak nie pomogło tak daleko. – auramo
@auramo, którego JVM używasz? Kompilacja słońca lub rzeczy OpenJDK/JVM z twojej dystrybucji? Zalecam używanie go do dystrybucji, jeśli jest to możliwe, ponieważ będzie mniej "bezpieczny" i dokładniejszy interfejs z jądrem/libc. –
Używam kompilacji Sun 1.6.0_13 i 1.6.0_10. Mogłabym łatwo wypróbować wersje OpenJDK, ale zmiana z wersji Sun OpenJDK na produkt końcowy byłaby głównym problemem w tym momencie projektu. – auramo