pstack und strace

Hier gibts Programmvorstellungen und Anleitungen dafür
Auch Howto's
Keine Hilfestellung
Antworten
Benutzeravatar
Juhu
Beiträge: 122
Registriert: So 24. Jul 2022, 18:10
Ubuntu Version: 22.04
Wohnort: Mödling

pstack und strace

Beitrag von Juhu »

Für Programmierer und die, die es werden wollen.

Wenn ein Programm einmal hängen sollte, dann wäre

Code: Alles auswählen

pstack PID 
eine Möglichkeit mehr Informationen heraus zu kitzeln. Es liefert euch die letzten Funktionsaufrufe des Programmes. Damit wisst ihr wo euer Programm hängt.
das WARUM kann es euch leider nicht sagen. Und es funktioniert nur auf 32Bit-Programme und auf x86-Hardware.
Wer das Programm auf 64Bit braucht der muss den GNU-C Compiler anwerfen :-( Alle anderen Architekturen bleiben außen vor :-(
ggf muss man es sogar mit

Code: Alles auswählen

sudo apt install pstack
nachinstallieren.

Deshalb ist mein Lieblingsprogramm auch das strace. Möglicherweise kann euch strace sagen, warum der Abbruch erfolgte..
ein

Code: Alles auswählen

strace -p PID

liefert euch Detail-Informationen was ein Programm gerade macht.
screen_020.jpg
Das geht soweit, dass sogar read und write Befehle und der Inhalt angezeigt werden. Der Name strace ist meines Wissens nach unter Linux geläufig. Auf Solaris und ähnlichen Unixen gibt es ihm unter dem Befehl truss. Wer jetzt den Inhalt in eine Datei schreiben lässt, sollte für ausreichenden Platz vorsorgen.

Die beiden Programmen sind ein bisschen heavy, aber man bekommt so einiges zu Gesicht. Die Interpretation der Informationen ist aber ggf nicht ganz einfach. Wie gesagt, man sollte einiges über Stack, Prozesse und Programmieren wissen.


meine Antwort = 21 anstatt 10 10 10
------------------------------------------------
Benutzeravatar
Juhu
Beiträge: 122
Registriert: So 24. Jul 2022, 18:10
Ubuntu Version: 22.04
Wohnort: Mödling

Re: Ergänzung pstack 64bit

Beitrag von Juhu »

Download vom das File pstack64-master.zip und danach den Code

Code: Alles auswählen

  
unzip pstack64-master.zip 
entpacken.
Das Programm kommt in Source-form daher. Deshalb brauch man einen Compiler und ein paar libs um das Programm zu übersetzen.
Das Kommando

Code: Alles auswählen

sudo apt install libunwind-dev
installieren die notwendigen Lib's und die Kommandos

Code: Alles auswählen

cd pstack64-master/
make
erzeugen ein Programm pstack64 dies kann dann mittels des Aufrufes

Code: Alles auswählen

sudo ./pstack64 PID
wobei die PID für ProzessID steht, ausgeführt werden.
Auf den Apache-Main-Prozess angewendet ergibt das
screen_022.jpg
folgenden Beispiel-Output.

Jetzt können wir erkennen welche Funktionen, von welcher Funktion aufgerufen wurde und wo das Programm gerade steht. In unserem Fall in der libc.so.6 in einer der select-Routinen. Wir können in diesem Fall erkennen, dass wir gar nicht im Apache-Code nachschauen müssen sondern im Linux-Code selbst. Aber das nur am Rande.

Eine Fehlereingrenzung ist mit pstack somit etwas einfacher möglich. Und wir können unter Umständen einen Fehler etwas leichter erkennen und orten.

PS: in meinen Fall liegt kein Fehler vor, sondern der Apache wartet nur, dass ein Request vom Netz kommt ;-)
Die Gurus unter euch haben schon längs einen

Code: Alles auswählen

man select
abgesetzt und wissen das sie im
SELECT(2) Linux Programmer's Manual
gelandet sind. Für alle Noch-Nicht-Gurus sei nur soviel verraten. Die select()-Funktion wartet bei einer Verbindung (File-Diskreptor) auf ein Ereignis z.B. Daten kommen Abbruch o.Ähnliches. Sie gibt ab diesem Zeitpunkt alle ihr zustehenden Zeitschlitze ab und der Prozess wird dafür belohnt.
Eine Funktion, die ich liebe ;-)
meine Antwort = 21 anstatt 10 10 10
------------------------------------------------
Antworten