(15. Mai 2006 — tk)

Debugging von Prozessen

Anbei ein kleiner Tipp, wenn man irgendwelche Probleme zwischen Client und Helios-Server diagnostizieren will. Neben klassischen Netzwerk-Traces [1] , die man sich bspw. mit ethereal2 anschauen kann, und die parallel ebenfalls sinnvoll sind (schließlich kann der Fehler auch alleine am Client auftreten und gar nicht bis zum Server kommen) hat man ab der UB-Version in Form von

"${HELIOSDIR}"/bin/srvmsg -D

ein wertvolles Diagnose-Werkzeug zur Verfolgung aller möglichen Helios-Prozesse zur Hand. Als weiteren Parameter für srvmsg -D benötigt man die Prozeß-ID des Prozesses, dem man genauer auf die Finger schauen will. Sollen also Fileserver-Verbindungen betrachtet werden, wird man sich also vorher per

"${HELIOSDIR}"/bin/swho -cn

einen Überblick verschaffen, wer von welcher Maschine aus am Server angemeldet ist, um dann den richtigen Prozeß zu erwischen (dabei evtl. sicherheitshalber nochmal per srvmsg -m -p eine Nachricht an die Client–Maschine schicken, um sicherzugehen, daß man auch wirklich am richtigen Prozeß lauscht)

srvmsg -D schaltet via Helios’ notifysrv den entsprechenden Prozeß anschließend in einen geschwätzigen Debug-Modus, so daß man dann in der Shell entsprechende fein granulierte Informationen zu allem bekommt, was der Prozeß sowohl Netzwerk– als auch Unix–mäßig zu sehen bekommt und macht. Also nochmal zur Verdeutlichung:

 powerbook-tk:~ root# read HELIOSDIR </etc/HELIOSInstallPath 

  powerbook-tk:~ root# "${HELIOSDIR}"/bin/swho -c
  Server              PID Address          User     When         Comment
  pcshare            3231 10.10.0.130      nobody   14:24:15     
  afpsrv             3232 10.10.0.143      tk       14:25:06     HELIOS Demo

  powerbook-tk:~ root# "${HELIOSDIR}"/bin/srvmsg -m -p 3232 "Trace gestartet"

  powerbook-tk:~ root# "${HELIOSDIR}"/bin/srvmsg -D 3232
  14:26:54.972426 #3232 [afpsrv] (timer) {server.c:1291}  
  14:26:55.972961 #3232 [afpsrv] (timer) {server.c:1291}  
  14:26:56.973225 #3232 [afpsrv] (timer) {server.c:1291} 
  [...]
  14:26:58.255018 #3232 [afpsrv] (dir) {o.c:1588} <____0056> dirid = 2
  14:26:58.255051 #3232 [afpsrv] (dir) {o.c:1592} <____0056> pdirid = 1 
  [...]

Den srvmsg-Prozeß am Ende dann einfach wie bei Traces auch per [ctrl]-c stoppen.


1 Ein Trace, der vom Server aus die Verbindungen mit einer bestimmten Adresse mitschneidet, läßt sich als root unter Solaris bspw. per

 snoop -d ${if} -D -o ${tracefile} host ${ip-adresse}

anfertigen oder unter MacOS X bzw. Linux per

 tcpdump -i ${if} -s 0 -U -w ${tracefile} host ${ip-adresse}

(${if} durch den Namen des Interfaces ersetzen, ${tracefile} durch den Dateinamen, in den die Pakete aufgezeichnet werden sollen… und ${ip-adresse} dürfte dann hoffentlich eh klar sein ;-)


2 Ethereal ist bei MacOS X simpel per DarwinPorts zu installieren, unter Solaris bequem per pkg-get . Linux-Distributionen enthalten ethereal in der Regel von Haus aus und Windows-Installer gibt es ebenfalls.

Copyright © Thomas Kaiser, 2008 (erstellt Montag, 15. Mai 2006)

Dieser Beitrag kann durch jedermann gemäß den Bestimmungen der Lizenz für die freie Nutzung unveränderter Inhalte genutzt werden. Die Lizenzbedingungen können unter http://www.uvm.nrw.de/opencontent abgerufen oder bei der Geschäftsstelle des Kompetenznetzwerkes Universitätsverbund MultiMedia NRW, Universitätsstraße 11, D-58097 Hagen, schriftlich angefordert werden.