Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Op het werk ben ik bezig geweest met het performance testen van mijn applicatie. Hierbij hadden we helaas te maken met een load balancer die op basis van het source IP adres routeert. We moesten dus meerdere IP's aliasen. Lang verhaal kort, JMeter ondersteunde dit niet, tenzij je meerdere processen draait en ieder proces aan een IP adres bind met een opstartparameter. Meerdere JMeter instanties dus.

Dit stond me niet aan dus ik ben nu thuis aan het proberen om hiervoor een fix in JMeter in te bouwen. Die fix is qua JMeter code geen probleem, maar ik loop tegen het probleem aan dat ik niet meerdere IP's kan aliasen op mijn thuisnetwerk.

Om eventuele problemen uit te sluiten heb ik het volgende testprogrammaatje geschreven:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;

import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) throws IOException {
        GetMethod getMethod = new GetMethod("http://www.google.nl");
        HttpClient httpClient = new HttpClient();
        HostConfiguration hc = new HostConfiguration();
        InetAddress inetAddress = Inet4Address.getByName("192.168.1.50");
        System.out.println("inetAddress = " + inetAddress);
        hc.setLocalAddress(inetAddress);
        httpClient.setHostConfiguration(hc);
        int code = httpClient.executeMethod(getMethod);
        System.out.println("code = " + code);
    }
}


50 is een IP alias die ik in Vista heb ingesteld. Ik heb een range van IP aliases opgegeven, vanaf 192.168.1.50 t/m 192.168.1.59.

Als ik bovenstaand programmaatje draai, krijg ik de volgende output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
inetAddress = /192.168.1.50
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: connect: Address is invalid on local machine, or port is not valid on remote machine
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: connect: Address is invalid on local machine, or port is not valid on remote machine
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: connect: Address is invalid on local machine, or port is not valid on remote machine
3-jan-2010 15:50:07 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
Exception in thread "main" java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at java.net.Socket.<init>(Socket.java:366)
    at java.net.Socket.<init>(Socket.java:240)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
    at Test.main(Test.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Process finished with exit code 1


Ik vind het nogal een vreemde foutmelding en hij vertelt me ook niet echt wat er nu precies mis is. Als ik het programma aanpas zodat ik een compleet ongeldig IP gebruik, zoals 192.168.1.60, dan krijg ik een JVM_BIND exception, dus niet de bovenstaande stack trace.

Als ik 127.0.0.1 opgeef als local address, dan kan ik wel gewoon www.google.nl opvragen. Dan krijg ik netjes een HTTP 200 code terug.

Van Google, StackOverflow, etc word ik niet veel wijzer. De enige twee conclusies die ik momenteel kan trekken, zijn dat de Java code op zich correct is (met 127.0.0.1 werkt het) en dat het koppelen aan een IP alias in principe ook goed gaat (bij ongeldige alias krijg ik een JVM_BIND exception). Maar daarna is het voor mij één grote mist...

Over mijn configuratie:
Ik draai Vista 64bit met JDK 1.6.0_14 vanuit IntelliJ IDEA. 9.
Mijn router is vrij standaard geconfigureerd, dus met DHCP aan. DHCP uitzetten leverde niets op...
Dit is mijn (onboard) netwerkkaart: Realtek RTL8168/8111 Family PCI-E Gigabit Ethernet NIC (NDIS 6.0)

Iemand een idee waarom het niet werkt?

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Dit moet uiteraard gewoon werken, hoe heb je dat extra IP adres ingesteld? Via network connections -> IPv4 -> Advanced en eentje toegevoegd met subnet 255.255.255.0?

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Erik Jan schreef op zondag 03 januari 2010 @ 17:37:
Dit moet uiteraard gewoon werken, hoe heb je dat extra IP adres ingesteld? Via network connections -> IPv4 -> Advanced en eentje toegevoegd met subnet 255.255.255.0?
Jup, alles ja. Alle IP's hebben dat subnet.

Binnen de opgegeven range heb ik trouwens 192.168.1.50 standaard gemaakt. Ik ga ervan uit dat Firefox etc. allemaal dit adres gebruiken...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Hrm, het lijkt erop dat het zonder aliasing ook al fout gaat. Ik heb DHCP terug aangezet, IP opgezocht (ipconfig) en dat IP adres gebruikt. Dan krijg ik ook dezelfde stack trace als in de TS.

Het lijkt erop dat ik niets anders dan 127.0.0.1 of localhost mag opgeven.

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Omdat ik het zelf ook wel nuttig vond had ik het even getest en het werkt gewoon onder XP. Dus wellicht zit UAC of Windows Firewall of een virusscanner in de weg en moet je slechts de VM executables aan je uitzonderingen toevoegen.

edit: of de Java sandbox / SecurityManager zelf! Al zal dat wel een andere exception opleveren.

[ Voor 17% gewijzigd door Erik Jan op 03-01-2010 18:27 ]

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Ik heb hem zonder firewall en UAC gedraaid vanaf de command prompt, als administrator, maar nog steeds dezelfde fout...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Ik heb het even op mijn XP laptop geprobeerd en daar gebeurt weer iets anders. Om met het goede nieuws te beginnen, de aliases werken. Ik kan een local address instellen dat afwijkt van localhost.

Het rare is alleen dat localhost en 127.0.0.1 niet werken. Hij geeft dan een timeout: connect exception in de executeMethod methode.

Maar het lijkt dus iets in Vista te zijn...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
localhost/127.0.0.1 als local adress opgeven voor een niet-loopback connectie is dan ook vreemd, zoniet gewoon niet mogelijk. Dat adres is gekoppeld aan de (virtuele) loopback netwerkadapter, die geen verbinding heeft met de rest van je netwerk.

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Herko_ter_Horst schreef op maandag 04 januari 2010 @ 13:23:
localhost/127.0.0.1 als local adress opgeven voor een niet-loopback connectie is dan ook vreemd, zoniet gewoon niet mogelijk. Dat adres is gekoppeld aan de (virtuele) loopback netwerkadapter, die geen verbinding heeft met de rest van je netwerk.
Hrm, XP gedraagt zich wat dat betreft idd op een logische manier. localhost werkt niet, IP (alias) werkt wel.

Raar dat het onder Vista juist localhost moet zijn...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Probeer je JVM eens op te starten met -Djava.net.preferIPv4Stack=true te starten
Het probleem is waarschijnlijk dat IPv6 aanstaat. In dat geval kunnen er rare dingen gebeuren, zeker met localhost omdat deze in eerste instantie naar ::1 verwijst en niet naar localhost.

BTW: Zijn de betreffende IP adressen wel toegewezen aan je NIC?

[ Voor 11% gewijzigd door Remus op 06-01-2010 12:39 ]


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Remus schreef op woensdag 06 januari 2010 @ 12:32:
Probeer je JVM eens op te starten met -Djava.net.preferIPv4Stack=true te starten
Het probleem is waarschijnlijk dat IPv6 aanstaat. In dat geval kunnen er rare dingen gebeuren, zeker met localhost omdat deze in eerste instantie naar ::1 verwijst en niet naar localhost.
Gedaan, maar het maakt geen verschil. Heb net ook IPv6 uitgezet in de config van mijn netwerkkaart.
BTW: Zijn de betreffende IP adressen wel toegewezen aan je NIC?
Hoe bedoel je? Ik heb in Windows een stel aliases aangemaakt. Verder heb ik niks gedaan...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
JKVA schreef op zondag 10 januari 2010 @ 19:10:
[...]

Gedaan, maar het maakt geen verschil. Heb net ook IPv6 uitgezet in de config van mijn netwerkkaart.

[...]

Hoe bedoel je? Ik heb in Windows een stel aliases aangemaakt. Verder heb ik niks gedaan...
Voor zover ik kan zien probeer je vanaf een computer met meerdere IP-adressen load te genereren op een andere server. Je kan alleen binden aan die IP adressen als ze ook daadwerkelijk zijn toegekend aan de configuratie van je netwerkkaart.

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Remus schreef op maandag 11 januari 2010 @ 10:24:
[...]

Voor zover ik kan zien probeer je vanaf een computer met meerdere IP-adressen load te genereren op een andere server. Je kan alleen binden aan die IP adressen als ze ook daadwerkelijk zijn toegekend aan de configuratie van je netwerkkaart.
Ehm, ik snap hem volgens mij nog steeds niet.

Wat ik gedaan heb, is:
- In Windows een stel IP aliases geconfigureerd in Netwerkcentrum -> netwerkkaart -> IPv4 settings: DHCP uit, onder Geavanceerd een stel aliases toegevoegd met subnet mask 255.255.255.0
- In mijn Java progje één van die IP adressen gepakt als local address.

Moet ik die IP adressen nu nog ergens anders toevoegen? Of moet DHCP uit op de router?

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Maxxi
  • Registratie: Mei 2004
  • Laatst online: 19-04 19:18
Als je in CMD -> nslookup intypt.
En dan vervolgens de ipadressen, werkt het dan wel?

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Maxxi schreef op maandag 11 januari 2010 @ 21:19:
Als je in CMD -> nslookup intypt.
En dan vervolgens de ipadressen, werkt het dan wel?
Nop, dan geeft hij:
code:
1
2
3
4
5
6
>nslookup 192.168.1.51
Server:  dns.tb.iss.as9143.net
Address:  212.54.40.25

*** dns.tb.iss.as9143.net kan 192.168.1.51 niet vinden:
Non-existent domain

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
JKVA schreef op dinsdag 12 januari 2010 @ 16:42:
[...]

Nop, dan geeft hij:
code:
1
2
3
4
5
6
>nslookup 192.168.1.51
Server:  dns.tb.iss.as9143.net
Address:  212.54.40.25

*** dns.tb.iss.as9143.net kan 192.168.1.51 niet vinden:
Non-existent domain
Ik heb weleens gezien dat java moeilijk doet als een IP niet reverse resolvable is. Wat gebeurt er als je de IP-adressen met een verzonnen naampje in de system32\drivers\etc\hosts (is op Vista misschien een iets andere plek, en denk eraan je editor als Administrator te starten) toevoegt?

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Topicstarter
Remus schreef op dinsdag 12 januari 2010 @ 20:48:
[...]

Ik heb weleens gezien dat java moeilijk doet als een IP niet reverse resolvable is. Wat gebeurt er als je de IP-adressen met een verzonnen naampje in de system32\drivers\etc\hosts (is op Vista misschien een iets andere plek, en denk eraan je editor als Administrator te starten) toevoegt?
Vreemd. Heb hem in de hostfile toegevoegd:
code:
1
192.168.1.50    blabla1


En de nslookup:
code:
1
2
3
4
5
6
>nslookup 192.168.1.50
Server:  dns.tb.iss.as9143.net
Address:  212.54.40.25

*** dns.tb.iss.as9143.net kan 192.168.1.50 niet vinden:
Non-existent domain


Maar die DNS server is een externe DNS. Misschien dat dat wel de oorzaak is...

De Java prog doet het trouwens ook niet. Heb ook DNS caching uitgezet...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
nslookup werkt altijd tegen een externe server en negeert hosts. Het ging het mij meer om uitsluiten dat het niet reverse resolvable zijn in Java de oorzaak was. Blijkbaar niet dus. Dan weet ik het helaas ook niet meer.
Pagina: 1