[ MMX @ 16.02.2013. 15:46 ] @
Pozdrav svima,

Na sledećoj lokaciji se nalazi primer jednostavne client-server aplikacije:

http://www.mmx.rs/sockets/example1.tar.gz
http://www.mmx.rs/sockets/example2.tar.gz

Client šalje serveru komandu, server je izvršava i vraća clientu response. Problem je što gore navedeni source radi ekstremno sporo na Linuxu dok na Windowsu i Mac OS X-u leti.

U primeru 1 koristim BufferedReader i PrintWiter, dok u primeru 2 koristim BufferedInputStream i BufferedOutputStream. Kod sam testirao na OpenJDK-u, Sun-ovom JDK-u 1.6 i Sun-ovom JDK-u 1.7 i na sva tri se identično ponaša. Takođe, testirao sam na dve različite distribucije (Ubuntu i Gentoo) jer sam mislio da možda nije u pitanju neki bug na Ubuntu-u.

Da li neko možda ima ideju u čemu može biti problem?

Performance:

Vreme izvršavanja koda na MacOSX-u oko 3 - 4 sekunde.
Vreme izvršavanja koda na Linuxu oko 7 minuta.

Kao da ga Linuxu nešto blokira, a ne mogu da provalim šta...

Unapred hvala na odgovorima.
[ djoka_l @ 16.02.2013. 18:11 ] @
Probaj da pakete koje šalješ po socketu dopuniš blankovima do dužine koje je približna dužini MTU. Ako ti je MTU 1400, napravi pakete koji su dugački, na primer, 1350 bajtova.

Bez obzira što koristiš flush, u nekim implementacijama socket biblioteke programeri se prave pametni pa ne urade flush ako je paket kratak.

EDIT: Drugu stvar koju možeš da pokušaš ja da smanjiš MTU na eth interfejsu na neku manju vrednost, pa onda da vidiš kako se program ponaša.

[Ovu poruku je menjao djoka_l dana 16.02.2013. u 19:26 GMT+1]
[ MMX @ 16.02.2013. 19:36 ] @
Client i server komuniciraju preko loopback a ne preko eth interfejsa. Jedino na loopback interfejsu da smanjim MTU vrednost, ako to ima nekakvog uticaja? Pokušaću ovo što si mi predložio, pa ću javiti rezultate.
[ duskooo @ 16.02.2013. 23:10 ] @
Jos jedna stvar koju treba da proveris je line separator (razlikuje se u zavisnosti od platforme): SO link
[ :o) @ 19.02.2013. 21:00 ] @
Da li si uspeo da resis glavolomku?
[ MMX @ 23.02.2013. 15:23 ] @
Nisam uspeo da rešim problem.
[ staticInt @ 23.02.2013. 17:10 ] @
Mislim da je networking problem u pitanju, to se lako moze ispitati, pogledaj dokumentaciju za Java sockete mozes da debugujes kad se sta desi sa socketom, moje neko misljenje je da se vrti oko prepoznavanja adrese ili tako neke glupe stvari koja je network prirode. Probaj sa linuxa telnet aplikacijom da otvoris konekciju na tom serveru.

Secam se da sam ja imao slican problem i bio je network prirode dns je nesto zezao.
[ MMX @ 23.02.2013. 22:18 ] @
To je i meni palo na pamet, međutim, probao sam umesto hostnamea da stavim IP adresu, i i dalje sam imao isti problem, tako da nije do toga. Probaću sa debagovanjem.
[ MMX @ 25.02.2013. 16:59 ] @
Našli smo rešenje problema:

http://www.jguru.com/faq/view.jsp?EID=42242

djoka_l je bio u pravu. :)