2010-06-23 2 views
0

Je dois mesurer le nombre d'octets utilisés par une application java depuis java (ie je n'ai pas d'accès spécial à la JVM autre que de gérer un gestionnaire de sécurité) mais j'ai besoin de tous les octets envoyés/reçu, y compris les en-têtes de protocole et similaires. Quelqu'un a de bonnes idées sur la façon de faire cela?Des idées comment je pourrais créer un "compteur" d'utilisation du réseau pour Java SE?

Le mouvement évident est de créer un nouveau URLConnectionHandler et d'insérer une mesure dans les flux d'E/S. Cependant, cela ne me fournit pas les tailles d'en-tête des messages HTTP/HTTPS envoyés vers/à partir d'une application Java.

Répondre

2

Si vous voulez le nombre exact d'octets sur le fil, vous avez besoin de l'aide du système d'exploitation et d'une manière très spécifique à la plate-forme.

La circulation réseau est un ensemble de poupées Babushka.

L'URLConnection ajoute un en-tête, la pile TCP ajoute un en-tête à chaque paquet, la pile Ethernet ajoute un autre en-tête. Ensuite, il y a les accusés de réception, les retransmissions, etc. qui se produisent derrière le dos de votre programme. Ensuite, il y a des requêtes DNS et des paquets de routage, ...

Vous aurez besoin de règles spéciales pour séparer le trafic de votre application du reste du trafic.

Tout-en-un assez sans espoir.

Pour des raisons pratiques, je vous recommande de configurer votre application sur une machine et d'utiliser wireshark ou similaire pour capturer le trafic. A l'intérieur, vous mesurez la charge utile telle que vous la décrivez, puis utilisez les mesures externes pour mesurer la surcharge.

Ensuite, estimez le surcoût% sur l'utilisation standard et ajoutez-le à la mesure de charge utile dans votre application.

Il sera assez proche pour que personne ne remarque la différence.

Questions connexes