Ich arbeite für ein Technologieunternehmen. Ich versuche, eine Instanz einer unserer Anwendungen im Feld zu beheben, und muss die TCP-Socket-Pufferfülle überwachen.
Ich weiß, dass ich, wenn ich Zugriff auf den Quellcode hätte, ioctl und SIOCOUTQ verwenden könnte, um die Fülle des Socket-Puffers zu jedem Zeitpunkt abzufragen.
Aber ich nicht.
Meine Frage ist also, gibt es eine Möglichkeit, die Fülle eines Socket-Puffers von außerhalb der Anwendung zu sehen?
Google hat mich nach / proc / net / tcp geführt, aber ich bin nicht 100% sicher, dass die Spalte tx_queue genau das ist, wonach ich suche. Ist es?
Wenn ja, ist es ausreichend "Echtzeit", dass ich ein Perl-Skript schreiben kann, um es ständig abzufragen, um eine Ansicht der Socket-Puffer-Nutzung zu erhalten?
Proc ist so gut wie Echtzeit ja, wenn Sie den Inhalt einer Datei unter / proc bekommen, baut er eigentlich die Ausgabe im Kernel auf, anstatt aus einer Datei oder ähnlichem zu lesen
Wie Jon sagte, wird es nicht möglich sein, den Pufferinhalt zu lesen, aber wenn Sie nur wissen wollen, ob Sie sich Ihrem Warteschlangenlimit nähern, dann ist tx_queue genau der richtige Ort. (oder vielleicht rx_queue natürlich abhängig davon, wo die Latenz auftritt)
Nun habe ich keine Ahnung, welche App Sie gerade anschauen oder was es tut, aber es gibt eine interessante Lektüre unter dem Titel bufferbloat darüber, wie es eigentlich besser sein könnte, Ihre Warteschlangenlänge zu reduzieren und tcp die Ratenänderungen besser handhaben zu lassen in Antwort darauf, was eine bessere Lösung sein könnte, anstatt die Warteschlange zu überwachen (und die App neu zu starten oder?)