Gibt es angesichts des Inodes eines Linux-TCP-Sockets (erhalten über /proc/<pid>/fd
) eine schnellere Möglichkeit, die Informationen nachzuschlagen, die ich /proc/net/tcp
über diesen Socket erhalten kann?
Ich habe ein Tool zur Fehlerbehebung geschrieben, das Prozesse überwacht und Echtzeitinformationen zu E / A-Vorgängen druckt (Informationen vom strace
Typ Typ, die in übergeordneten Abstraktionen gesammelt und weniger grob dargestellt werden), aber auf einem stark ausgelasteten Netzwerkserver stelle ich fest, dass die Zeit dafür benötigt wird Das Nachschlagen von Socket-Informationen (z. B. die fremde Adresse / der fremde Port) ist einfach aufgrund der sehr großen Größe von /proc/net/tcp
(ca. 2 MB auf dem Server, den ich gerade betrachte) unerschwinglich .
Ich kann dies etwas mit Caching verwalten, aber dies führt zwangsläufig zu Latenz und lässt mich über die Absurdität einer "API" nachdenken, die das Lesen und Parsen von ASCII-Text im Wert von 2 MB erfordert, um Informationen zu einem Socket zu finden.
iptstate
, das ähnliche Bedürfnisse hat. Sie könnten sich ansehen, wie dieses Programm es macht. Ich glaube nicht, dass es verwendet/proc/net/tcp
.