Ho un componente di terze parti che tenta di inviare troppi messaggi UDP a troppi indirizzi separati in una determinata situazione. Questo è un burst che accade quando il software viene avviato e la situazione è temporanea. In realtà non sono sicuro che sia la semplice quantità dei messaggi o il fatto che ognuno di essi vada a un indirizzo IP separato.IOExcezione Java: nessuno spazio buffer disponibile durante l'invio di pacchetti UDP su Linux
In ogni caso, la modifica del protocollo sottostante o del componente problematico non è un'opzione, quindi sto cercando una soluzione alternativa. Lo StackTrace assomiglia a questo:
java.io.IOException: No buffer space available
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
Questo problema si verifica (almeno) con le versioni di Java 1.6.0_13 e 1.6.0_10 e le versioni di Linux Ubuntu 9.04 e RHEL 4.6.
Esistono alcune proprietà del sistema Java o modifiche alla configurazione di Linux che potrebbero essere utili?
Grazie. Oltre a questi parametri, ho provato a modificare anche net.ipv4.udp_mem e net.ipv4.udp_wmem_min. Per prima cosa ho raddoppiato, i valori, poi li ho raddoppiati e alla fine li ho modificati per essere 10 volte più grandi dei valori predefiniti. Niente ha aiutato finora però. – auramo
@auramo, quale JVM stai usando? La build del sole o la roba OpenJDK/JVM dalla tua distribuzione? Ti consiglio di usarne uno per la tua distro, l'open se possibile in quanto sarà meno "sicuro" e l'interfacciamento più accurato con il kernel/libc. –
Sto usando le build Sun di 1.6.0_13 e 1.6.0_10. Potrei facilmente provare con le versioni OpenJDK, ma cambiando dall'implementazione Sun, OpenJDK per il prodotto finale sarebbe un grosso problema a questo punto del progetto. – auramo