Zdarvim,
jakou pouzivate verzi Javy?? Nam se stalo neco podobneho v nasi web
aplikaci. Pomoci JConsole jsme prisli na to, ze sockety neprojdou
finelizerem (duvod je spatne napsana metoda finalize). Tu to chybu jsme
vygooglili a mela by byt opravena ve verzi Javy 1.6. Pokud to nicemu nebrani
tak bych doporucit prejit.
S pozdravem Jan Liska
On Fri, Feb 29, 2008 at 11:56 AM, Stepan Roh <[EMAIL PROTECTED]> wrote:
> Zdravim.
>
> Objevil jsem takove zajimave chovani socketu v Jave na Windows ve
> spojitosti s Apache.
>
> public static void main(String[] args) throws Exception {
> int i = 0;
> while (true) {
> Socket sock = openSocket();
> OutputStream os = sock.getOutputStream();
> os.write("GET / HTTP/1.1\n\n".getBytes());
> InputStream is = sock.getInputStream();
> while (is.read() != -1) {
> // void
> }
> is.close();
> os.close();
> sock.close();
> System.out.println("" + i++);
> }
> }
>
>
> private static Socket openSocket() throws Exception {
> InetAddress address = InetAddress.getByName("localhost");
> Socket socket = new Socket(address, 80);
> socket.setReuseAddress(true);
> socket.setTcpNoDelay(true);
> socket.setKeepAlive(true);
> socket.setSoLinger(true, 0);
> return socket;
> }
>
> Takto se mi na mem stroji (Windows XP Professional, Apache 2.0.59)
> podarilo docilit otevreni 24362 spojeni. Po zakomentovani radku
> uzavirajicich spojeni jich bylo 27596 a po zakomentovani radku s
> nastavenim SO_LINGER (ale s uzaviranim) jich bylo 29018. To jsou cisla,
> ktera me prekvapila, protoze SO_LINGER s timeoutem 0 by melo zpusobit, ze
> pri zavreni socketu dojde k okamzitemu TCP resetu spojeni a to by pak melo
> byt okamzite k pouziti.
>
> Nejde pouze o tento test, problem se vyskytnul i pri realnem nasazeni.
>
> Nesetkal se s tim jeste nekdo? Diky.
>
> S pozdravem,
>
> Stepan Roh
>