System.nanoTime() einheitlichen Wert auf mehreren Rechnern?

Status
Nicht offen für weitere Antworten.

outbreaker

Bekanntes Mitglied
Hallo

Ich habe ein Problem mit dem Messen von Zeiten und der System.nanoTime() Funktion!

Ich habe zwei Linuxrechner und habe auf diesen die Zeit mitteln ntpdate synchronisiert somit haben beide die selbe Systemzeit.
Nun habe ich zum Testen versucht auf beiden Rechner gleichzeitig so gut es geht die System.nanoTime() aufzurufen. Bekomme auf beiden Rechner auch fast Zeitgleich eine Ausgabe aber die Abweichung der beiden Ausgaben ist extrem groß. Ich bekomme auf dem einen Rechner 2272789129528 und auf dem anderen 2091258104904 das is eine Diverenz von 1,8*10^11 nano Sekunden also ein extrem großer Unterschied. Woran liegt das?
Kann ich mir dieser Funktion nur die Ausführungzeit von Code messen?

Mein eigentliches Ziel ist es das ich die Zeit die ein UDP bzw TCP Paket von einem zum anderen Rechner braucht messen will. Dieses wollte ich auf die Art lösen das ich in das Paket die Nano Sekunden vom Sender schreibe und der Empfänger gleicht das dann mit seiner Nano Zeit ab.

1) Kann ich die NanoTime bei beiden Rechner auf den selben Wert setzen?
2) Gibt es eine andere Funktion zum Zeit auslesen genauer als Millisekunden?
3) oder hat jemand generell eine anderen Möglichkeit?

Danke für die Hilfe
 

HoaX

Top Contributor
sende von A nach B ein paket. Lass dann B ein paket zur bestätigung an A senden. Miss die zeit zwischen versenden und antwort und teile durch 2. die zeit auf beiden rechnern entsprechend zu synchronisieren ist eigentlich unmöglich.

nanoTime liefert den aktuellen wert des system-timers, der nicht wirklich eine uhrzeit darstellt. die kannst du nicht einfach vergleichen.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime()
 

outbreaker

Bekanntes Mitglied
Das mit dem zurücksenden ist ein kleines Problem und durch zwei Teilen kann ich den Wert leider auch nicht.
Aus dem Grund weil auf dem Sendenen Rechner noch Trafficshaper und verschiedene Queues aktive sind. Ich möchte die Zeit messen wie lange ein Paket bei verschiedenen Einstellungen braucht.

Edit:
Des Weiteren kann es dann auch passieren das Quitierungen (jedenfalls bei UDP) verloren gehen. Somit kann ich nicht einschätzen ob die Quitung verloren gegangen ist oder ob der Traffic Shaper das PAket weggeworfen hat.
 

Hilefoks

Bekanntes Mitglied
Moin,

schau dir die RFC 958 an, das ist der RFC zu NTP. NTP kämpft grundsätzlich mit ähnlichen Problemen.

Das Problem ist zum einen die Systemuhr, die immer ungenau läuft und nicht in Milli- oder gar Nano-Sekunden auflöst. Das nächste Problem ist das Betriebssystem. Da dieses in aller Regel nicht Echtzeitfähig ist, also nicht garantiert in einer definierten Zeit zu reagieren, gibt es hier schon u.U. extreme Schwankungen. Auch die RTC des Kernels sind dazu zu ungenau. Zuletzt ist aber auch TCP/IP nicht auf solche Aufgaben ausgelegt. Einfach ein Paket hin und her schicken und die vergangene Zeit durch 2 zu Teilen mag in einem kleinen lokalem Netzwerk ausreichen, sicher ist ein solches Verfahren aber auch nicht. Eine Auflösung kleiner 50-100 Mikrosekunde wirst du sicher nicht schaffen, egal mit welchem Verfahren. Selbst die modernen High Resolution Timer ab Kernel 2.6.21 lösen nicht hoch genug auf, sind nicht portabel und werden von Java sicher auch nicht in der Form unterstützt.

MfG,
Hilefoks
 

outbreaker

Bekanntes Mitglied
wenn ich die Auflösung in Mikrosekunden hinbekommen würde und wenn nur auf 100 genau wäre das schon sehr viel hilfreicher als Millisekunden

Gibt es Linux die Möglichkeit sich die Zeit in Mikrosekunden ausgeben zu lassen?
da mein Programm ja unter linux laufen soll könnte dann diese Funktion nutzen
 

outbreaker

Bekanntes Mitglied
irgendwie stehe ich gerade auf dem Schlauch aber ich bekomme es nicht hin das er mir das ausgibt

Wie muss der String aussehen den ich in die Konsole eingebe?

ich habe es so verstanden: #>date + '%s.%N' das macht er aber nicht da kommt nur "date: extra operand '%s.%N' Try date --help for ..." aber aus der man page werde ich nicht schlau wie cih das machen muss
 

outbreaker

Bekanntes Mitglied
ok habe herausbekommen warum das bei mir fehler bring ich muss

das so schreiben date +"%s.%N" Ich hatte zwischen dem + und " noch nen leerzeichen
 

outbreaker

Bekanntes Mitglied
habe gerade mal getestet wie lange das aus java raus dauert diese funktion auszuführen das sind im schnitt 17ms das is natürlich viel zu langsam
habe das mit Runtime gemacht

leider kann ich das so nicht machen

hat jemand eine andere idee?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Lottospielen mit System, Versuch 2, noch umständlicher als vorher Allgemeine Java-Themen 1
J Frage zu System.getproperties. Allgemeine Java-Themen 60
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
F Frage zu System.in Allgemeine Java-Themen 3
E System property setzten Allgemeine Java-Themen 8
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
O Beziehung System.exit(x) <>Errorlevel Allgemeine Java-Themen 2
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
H Im Tiled-Map-System ein Item anklicken Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Login System Allgemeine Java-Themen 19
A BufferedReader ohne System.in Allgemeine Java-Themen 9
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
D Java System.out::println Allgemeine Java-Themen 1
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
S Ist Java ein geschlossenes System? Allgemeine Java-Themen 2
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Neumi5694 System.out und System.err umleiten - NICHT im Quelltext Allgemeine Java-Themen 4
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
A Java | Login-System Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
F Benachrichtigungs-System Webapp Java Servlet Allgemeine Java-Themen 10
M collection persistence system Allgemeine Java-Themen 4
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
D System.out's in String speichern. Allgemeine Java-Themen 2
H Interpreter-Fehler ArrayIndexOutOfBoundsException bei System.arraycopy() Allgemeine Java-Themen 3
M System herausfinden Allgemeine Java-Themen 6
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
R Methoden Tag System Problem Allgemeine Java-Themen 3
J System.out im GUI anzeigen Allgemeine Java-Themen 3
N System.exit(0/1) Allgemeine Java-Themen 3
F System.out.println mit log4j ersetzen Allgemeine Java-Themen 10
D System.LoadLibrary(..) - Programm stürzt ab Allgemeine Java-Themen 2
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
Kr0e User management system Allgemeine Java-Themen 2
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
Rudolf Wann System.exit und wann dispose? Allgemeine Java-Themen 9
ruutaiokwu System.out auf files umlenken in log4j.xml Allgemeine Java-Themen 4
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
agent47 Plugin System Verständnisfrage Allgemeine Java-Themen 6
M Wie externe System-Ressourcen zwangsweise freigeben Allgemeine Java-Themen 2
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
P System.out im Eclipse plugin Allgemeine Java-Themen 4
C File System Watcher Allgemeine Java-Themen 2
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
A Problem mit System.getProperty(...) Allgemeine Java-Themen 5
D System.loadlibrary funktioniert nicht Allgemeine Java-Themen 6
H Event ähnliches System Allgemeine Java-Themen 20
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
M Plugin-System Allgemeine Java-Themen 4
A NullPointer bei System.getProperty("file.seperator") Allgemeine Java-Themen 4
R System.out oder System.err? Allgemeine Java-Themen 10
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
K System.exec() Programm mit mehreren Parametern Allgemeine Java-Themen 8
G unerklärliches System.out Allgemeine Java-Themen 3
M System.setProperty("javax.net.ssl.trustStore", "mykey.pkx"); Allgemeine Java-Themen 1
T System Preferences + LInux (Ubuntu) Allgemeine Java-Themen 8
G OutputStream to System.out Allgemeine Java-Themen 35
J Wo werden die System properties gespeichert Allgemeine Java-Themen 12
C JSR295 in Produktiven System zu empfehlen? Allgemeine Java-Themen 3
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Feststellen ob System-Konsole verfügbar Allgemeine Java-Themen 2
L remote debugging of a multi threaded system Allgemeine Java-Themen 2
F Probleme mit eigenem Plugin-System Allgemeine Java-Themen 3
L System.exit Allgemeine Java-Themen 3
G System.out und String machen was anderes Allgemeine Java-Themen 5
G System.out im window h.inein bringen? Allgemeine Java-Themen 8
A System.in pipen Allgemeine Java-Themen 3
P System.getProperty zu Classloader Allgemeine Java-Themen 21
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
E System.out umleiten Allgemeine Java-Themen 2
S system.out und system.err einer Methode in Datei schreiben. Allgemeine Java-Themen 7
S System Informationen auslesen. Allgemeine Java-Themen 3
N Thread und System.out.print() Allgemeine Java-Themen 2
K Kann man System.out in eine Datei speichern? ähnlich wie log Allgemeine Java-Themen 7
B Native DLL zweimal laden: System.load(sPath); Allgemeine Java-Themen 5
P System.getProperty("user.dir") Allgemeine Java-Themen 10
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
N Plugin-System: Klassen über String laden Allgemeine Java-Themen 3
T System-Monitoring in Echtzeit Allgemeine Java-Themen 2
E System.out.println Allgemeine Java-Themen 5
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
G System.out.println(is.getClass().getName()); Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben