Comment trouver la cause du retard?

Un programme sur lequel je travaille doit traiter certains objects à l’arrivée du réseau en temps réel. Le débit est bon, mais j’ai parfois des chutes dans la file d’entrée en raison de retards imprévus.

Mon parsing montre que très probablement la source du retard est en dehors de mon programme; quelque chose comme un autre processus étant programmé sur le cœur de processeur de mon processus (je règle l’affinité du processus à un certain kernel) ou une interruption de matériel arrivant (peut-être une interruption de réseau).

Mon problème est que je ne connais pas la source du retard à coup sûr. Existe-t-il un outil ou une méthode permettant de déterminer comment un cœur de processeur a été utilisé exactement pendant un certain temps? (Par exemple, en me disant que le kernel 0 était utilisé par le processus 19494 99,1% du temps, traiter 20001 0,8% du temps et traiter 8110 0,1% du temps.)

J’utilise Ubuntu 14.04 Server Edition sur un serveur HP avec un processeur Xeon.

pourrait être CPU, Diskspeed, vitesse réseau ou mémoire.

L’utilisation de la mémoire et du processeur est facile à repérer en utilisant htop . (utilisez l’option de sorting, F6)

La vitesse HD pourrait être un problème. par exemple, si vous utilisez des disques à faible consommation d’énergie (ils ralentissent lorsqu’ils ne sont pas utilisés). Avez-vous une firebase database fonctionnant sur le même système? utiliser iotop , cela pourrait donner un indice.