/ usr / bin / random mit viel CPU

7

Unter Verwendung von QNX 6.4.1 wird ein Befehl aufgerufen pidin times, der Informationen zu Prozessen anzeigt. Ich denke, es bedeutet PID-Informationen. Unter anderem können Sie sehen, wie viel CPU ein Prozess seit seinem Start verbraucht hat.

Ich habe ein System, das eine Prozessorauslastung von fast 2 Minuten anzeigt, /usr/sbin/randomnachdem das System etwa 10 Stunden lang ausgeführt wurde. Das scheint viel zu sein, da nichts in meinem Code aufruft /usr/sbin/random.

Derzeit gibt es jedoch viele Netzwerkaktivitäten (UDP und TCP). Daher frage ich mich, ob der Netzwerktreiber randomaufgrund von Paketkollisionen dynamische Backoff-Zeiten für Kollisionen anruft .

Könnte diese Theorie richtig sein? (Okay, wie plausibel ist das?) Wenn nicht, sollte ich noch etwas überprüfen? Derzeit gibt es Latenzprobleme mit diesem System, die gestern nicht existierten, und ich möchte herausfinden, was los ist. Dieser spezielle Hinweis kann helfen, das Problem einzugrenzen.


Aktualisieren

Weitere Untersuchungen unter Verwendung von nicinfoergaben überhaupt keine Paketkollisionen. Da ist also meine Theorie der dynamischen Kollisions-Backoff-Zeit. Irgendwelche anderen Ideen?


Ein weiteres Update

Während dies dazu beitrug, die Antwort auf mein Problem zu finden (SSHD verwendete natürlich zufällig !!), seien Sie vorsichtig. Wenn Sie SSH verwenden, ist eine Funktion erforderlich random, damit Sie sich anmelden können. Aus irgendeinem Grund random.oldfunktionierte der Aufruf in meinem Skript nicht und ich habe mein eingebettetes System fast zugemauert. Also sei vorsichtig.

kmort
quelle
/usr/bin/randomwird nicht vom Betriebssystem verwendet, ich denke, es ist eine Benutzeranwendung, die zufällige Zeilen einer Datei druckt. Es wird in Shell-Skripten verwendet.
Barmar
Im Allgemeinen verwenden Kerneltreiber keine ausführbaren Dateien, sondern Kernelbibliotheken.
Barmar
@Barmar Noted. Ich bin mir nicht sicher, was los ist, da es sich um ein ziemlich leichtes Embedded-System handelt, auf dem nur meine Software ausgeführt wird.
kmort
@Barmar Das ist das BSD-Spiel. QNX hat ein nicht verwandtes randomDienstprogramm, das Zufallszahlen generiert. Ich weiß nicht, was auf dem System verwendet wird.
Gilles 'SO - hör auf böse zu sein'
Können Sie die Prozessabrechnung aktivieren, sollte dies Ihnen mitteilen, wer den Befehl ausführt.
Barmar

Antworten:

4

Verrückte Idee zur Fehlerbehebung: Erstellen Sie eine Prozessabrechnung für einen Honigtopf / einen armen Mann.

  1. Erstellen Sie ein Backup von /usr/bin/random

    cp -p /usr/bin/random /usr/bin/random.bak
    
  2. touch /tmp/who_is_calling_random.log ; chmod 622 /tmp/who_is_calling_random.log

  3. Ersetzen Sie /usr/bin/randomdurch dieses Shell-Skript (beachten Sie, dass Sie bei Bedarf einen anderen Pfad als / tmp verwenden können, aber stellen Sie sicher, dass er weltweit beschreibbar ist).

    #!/bin/sh
    echo "`date` $USER $$ $@" >> /tmp/who_is_calling_random.log
    /usr/bin/random.bak "$@"
    
  4. chmod 755 /usr/bin/random

  5. Starten Sie das System neu.

  6. Sehen Sie, was sich im Honeypot-Protokoll befindet. Dies sollte ein Protokoll darüber sein, wer / was hinter der Verwendung des Zufallsprogramms steht.

    tail -f /tmp/who_is_calling_random.log
    
  7. Stellen Sie randomdie Sicherung wieder her, die Sie in Schritt 1 erstellt haben.

  8. System neu starten.

Joshua Huber
quelle
Beeindruckend. Dies ist also eine gute Idee, es sei denn, Sie verwenden SSH als EINZIGEN Weg, um mit dem eingebetteten System zu kommunizieren. Dann ist es schlecht . Sie können sich nicht über SSH anmelden, ohne usr/sbin/randomausgeführt zu werden. Während ich mein System aufgrund dieser Antwort vorübergehend kaputt machte, fand ich auch etwas, das zufällig verwendet wurde und offensichtlich sein sollte. SSHD ist sehr wahrscheinlich der Schuldige. Kurz und gut, es ist eine gute Idee, das Problem einzugrenzen. Seien Sie vorsichtig und probieren Sie es zuerst auf einer VM aus. Danke Joshua. :-)
kmort
Wenn ich meinen Kommentar noch einmal lese, könnte es ein bisschen snarky klingen. Es war kein Snark beabsichtigt. Herzlichen Dank Joshua.
kmort
Kein Snark genommen. Ich bin froh, dass diese verrückte Idee geholfen hat.
Joshua Huber
Das Skript sollte chmod 755nicht sein chmod 777. Die temporäre Datei sollte seinchmod 622 /tmp/who_is_calling_random.log
Barmar
@Barmar, danke, du hast recht. Ich habe die Antwort aktualisiert. Dies muss das erste Mal sein, dass ich verwendet habe 622.
Joshua Huber