PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Samba mit vielen Prozessen und hoher CPU-Last



linuxroot
04.06.07, 22:52
Hallo,

ich habe in einem Netzwerk mit Debian Etch als Samba-Server und vornehmlich WinXP-Clients nach einer Änderung an Samba Probleme mit konstant hoher CPU-Last (top zeigt immer 98-99% Last an).

Ich benutze ein RAID5 mit SATA-Platten und einer Verschlüsselung, bisher war die Auslastung des Servers aber sehr gering. Geändert habe ich nur den Mountpoint für das RAID und entsprechend die Pfadangaben für Samba sowie die Namen der Freigaben.

Probleme: Es gibt zig Prozesse vom smbd, sie teilen die Last unter sich auf. Immer wenn ich top ansehe, seh ich zuerst seltsamerweise nur ca. 10 Prozesse mit je 10% Last (Dual-Prozessor), und nach wenigen Sekunden dann zig Prozesse mit je 3% Last.

Das Log vom Samba schaut wohl nicht gut aus :


[2007/06/04 22:16:18, 1] smbd/process.c:process_smb(1103)
Connection denied from 10.151.254.184
[2007/06/04 22:16:20, 1] smbd/process.c:process_smb(1103)
Connection denied from 10.151.254.184
[2007/06/04 22:18:10, 1] smbd/service.c:close_cnum(1150)
zenith (10.151.254.124) closed connection to service public-upload
[2007/06/04 22:19:00, 0] smbd/service.c:make_connection(1111)
evaluator (10.151.252.132) couldn't find service upload
[2007/06/04 22:19:14, 1] smbd/service.c:make_connection_snum(950)
hasusd (10.151.253.220) connect to service public-upload initially as user nobody (uid=65534, gid=200) (pid 1632)
[2007/06/04 22:20:59, 0] lib/util_sock.c:write_data(562)
write_data: write failure in writing to client 10.151.254.120. Error Die Verbindung wurde vom Kommunikationspartner zurückgesetzt
[2007/06/04 22:20:59, 0] lib/util_sock.c:send_smb(769)
Error writing 4 bytes to client. -1. (Die Verbindung wurde vom Kommunikationspartner zurückgesetzt)
[2007/06/04 22:22:47, 1] smbd/service.c:make_connection_snum(950)
macintosh (10.151.250.3) connect to service public-upload initially as user nobody (uid=65534, gid=200) (pid 2652)
[2007/06/04 22:23:52, 1] smbd/process.c:process_smb(1103)
Connection denied from 10.151.252.222
[2007/06/04 22:24:00, 1] smbd/process.c:process_smb(1103)
Connection denied from 10.151.252.132


smbstatus:

- Bei manchen WinXP-Clients hab ich anfangs noch gesehen dass sie auf die alten Freigaben zugreifen wollten, aber mittlerweile nicht mehr.
- Ich sehe hunderte $IPC-Zeilen (mehrere pro Rechner) - was haben die zu bedeuten? Ich kann auch sehen, dass bereits geschlossene Verbindungen von meinem Rechner bei $IPC immer noch auftauchen, und die haben ja alle auch noch einen Prozess laufen.

Nach einem Upgrade des Debian-Systems, das ich etwa gleichzeitig mit den Samba-Änderungen vorgenommen hatte, konnte ich auch feststellen, dass es mit der Darstellung von Sonderzeichen (UTF8-System) Schwierigkeiten gibt, die es vorher nicht gab. Aus den Freigabenamen habe ich die Sonderzeichen aber rausgenommen. Ich denke nicht dass das Problem daran liegt.

Ich habe - weil ich kein smbp.pid gesehen habe und der Samba-Stop nicht richtig geklappt hat - auch schon mit killall alle Prozesse abgeschossen und alle Dateien unter /var/run/samba weggemoved (war ein Tipp aus nem Forum)und den Samba dann neugestartet - mit dem Ergebnis dass nach kurzer Zeit wieder viele Prozesse gelaufen sind.

Wie kann ich rausfinden was da schiefläuft? tcpdump und strace konnte ich keine Informationen entnehmen, die mir weiterhelfen.

Vielen Dank für jeden Tipp der mir weiterhelfen kann!!

mamue
08.06.07, 10:58
Für jeden User läuft ein smbd. Wenn sich mehrere User anmelden, ist es normal, dass anfangs eine etwas höhere Last auftritt. Wo liegen denn die User (tdbsam, ldapsam) und wie viele sind es? Kannst Du mal die ersten paar Zeilen von "top" posten? Ich frage mich, ob die CPU-Last durch user Prozesse (us), im Kernel-space verbraten wird, oder ob die Platten (wa) die Leistung verschlingen.

mamue

linuxroot
09.06.07, 13:48
Hallo,

Die Last wurde im Userspace verbraten - ich hab bisher gar nicht gewusst für was die Abkürzungen stehen.

Die User melden sich bis auf wenige Ausnahmen anonym an, sie werden alle auf einen User nobody und eine bestimmte Gruppe "gemapped".

Stimmt, die Anzahl an smbd-Prozessen sollte nicht das Problem sein. Sie war übrigens bereits auf 150 Prozesse limitiert.

Ich habe zwei Änderungen in die smb.conf geschrieben, da mir aufgefallen ist dass bereits lange beendete Verbindungen von meinen Rechnern mit 'smbstatus' weiterhin angezeigt wurden:



# deadtime Legt die Anzahl in Minuten der Inaktivität fest, bevor eine Verbindung beendet werden sollte. default 0 (unendlich)
deadtime = 15
# keep alive Setzt die Anzahl Sekunden zwischen den Checks für einen nicht einsatzfähigen Client. default 0 (unendlich)
keep alive = 180


Damit sind die Last-Probleme irgendwie beseitigt (und die Anzahl an smbd-Prozessen ist ganz nebenbei auch zurückgegangen).
Ich teste nochmal, ob die hohe Last ohne diese Optionen auch wieder auftritt.

Die wenigen Samba-Prozesse, die jetzt noch laufen, machen auch so gut wie keine Last mehr. Damit hab ich das Problem nicht wirklich verstanden. ich hab nicht kontrolliert welche PIDs die Prozessorlast verursacht haben - evtl die "alten" (nicht mehr aktuellen) Verbindungen?

Was nach wie vor häufig auftritt sind die folgenden Meldungen im Samba-Log:



[2007/06/09 11:23:05, 0] lib/util_sock.c:get_peer_addr(1229)
getpeername failed. Error was Der Socket ist nicht verbunden
[2007/06/09 11:23:05, 0] lib/util_sock.c:write_data(562)
write_data: write failure in writing to client 10.151.253.220. Error Die Verbindung wurde vom Kommunikationspartner zurückgesetzt
[2007/06/09 11:23:05, 0] lib/util_sock.c:send_smb(769)
Error writing 4 bytes to client. -1. (Die Verbindung wurde vom Kommunikationspartner zurückgesetzt)



Es sind höchstens 10 - 20 User gleichzeitig verbunden bzw aktiv. Ich schätze, dass viele von insgesamt 120 möglichen Usern ein oder zwei Freigaben als "Laufwerke" (es sind zumeist WinXP-Clients) fest eingebunden haben, aber es ist auch immer nur ein Teil der Client-Rechner eingeschaltet (Studentenwohnheim).

magic_halli
15.08.07, 09:25
Was nach wie vor häufig auftritt sind die folgenden Meldungen im Samba-Log:

[2007/06/09 11:23:05, 0] lib/util_sock.c:get_peer_addr(1229)
getpeername failed. Error was Der Socket ist nicht verbunden
[2007/06/09 11:23:05, 0] lib/util_sock.c:write_data(562)
write_data: write failure in writing to client 10.151.253.220. Error Die Verbindung wurde vom Kommunikationspartner zurückgesetzt
[2007/06/09 11:23:05, 0] lib/util_sock.c:send_smb(769)
Error writing 4 bytes to client. -1. (Die Verbindung wurde vom Kommunikationspartner zurückgesetzt)

Nach dieser Meldung habe ich mir auch schon die Augen wund gesucht... und die Antwort darauf gefunden:
Wird auf eine Samba-Freigabe von Win-Clients zugegriffen, verwendet Samba Port 139 und CIFS Port 445. Es wird nun versucht, auf beiden Ports eine Verbindung aufzubauen. Der Client bekommt dann von einem der beiden Ports eine Antwort und dropped die andere Port-Verbindung - daraus resultiert dann diese Meldung. Welcher Port das jedoch ist, hab ich leider noch nicht rausgefunden!
Dies hat keine negativen Auswirkungen, bis auf die ständigen Logfileeinträge...

Gruß