• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Serverload 150+

Hallo,

ich weiß garnicht, wo mein Problem am besten aufgehoben ist - aber root-server ist denke ich nicht falsch...

Ich habe einen Root Server, auf dem Suse 10.3 mit Plesk läuft. Als ich gegen 23 Uhr eine unserer Seiten aufrufen wollte, bekam ich ein Fehlermeldung, dass es zu viele Verbindungen gibt...
Die Serverload ging sekündlich hoch, zuletzt auf über 150. Mit shutdown -r now konnte ich den Rechner nicht neustarten. Erst nach einem killall httpd2-prefork bewegte sich was und der Rechner wurde neu gestartet.
Jetzt scheint alles OK zu sein, die Serverload ist höher als normal aber ich denke OK:
load average: 1.12, 1.30, 1.23

Nun versuche ich herauszufinden, was da los war. Kann so etwas einfach mal passieren? Oder brennt es irgendwo?
es wurden übrigens 170 Prozesse als zombies ausgegeben.

Da ich gerade erst einige Änderungen am Server vorgenommen habe, bin ich natürlich etwas verunsichert, ob es da vielleicht einen Zusammenhang gibt - oder doch nur ein dummer Zufall?!

Hier genaueres:

Vor zwei Tagen habe ich unsere bilinguale Webseite so umgestellt, dass die Textbausteine aus der Datenbank gelesen werden
(define ("_KONSTANTE", "Übersetzung")) - auf dem Testserver hatte ich das Gefühl, dass dies über die DB sogar schneller ist, als über Text-Dateien.
Bei der Nutzung unserer Webseite hatte ich in den vergangenen Tagen auch nicht das Gefühl, dass die Geschwindigkeit abgenommen hat.
Zusätzlich habe ich Gestern noch einige Anpassungen an der MySQL conifg (my.cnf) vorgenommen (in # die alten Werte):
Code:
# The MySQL server
[mysqld]
set-variable=local-infile=0
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
#key_buffer = 16M
key_buffer = 64M
max_allowed_packet = 2M
#table_cache = 64
table_cache = 100
#sort_buffer_size = 512K
sort_buffer_size = 2M
net_buffer_length = 8K
#read_buffer_size = 256K
read_buffer_size = 1M
#read_rnd_buffer_size = 512K
read_rnd_buffer_size = 1M
#myisam_sort_buffer_size = 8M
myisam_sort_buffer_size = 10M

# F.I. 13.10.2008 added
query_cache_limit = 1M
query_cache_size = 16M
query_cache_type = 1

WatchDog gibt für die letzten 24 Stunden eine CPU Auslastung unter 20% aus, die Speichernutzung (RAM) liegt bei vielleicht 450, also ca. 50%.
Anbei ein Screenshot der top Ausgabe.
Von unserem vBulletin Forum bekomme ich jetzt noch hunderte Mail mit der info:
mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Too many connections
/srv/www/vhosts/mydomain.de/httpdocs/includes/class_core.php on line 311
(Alle Mails sind datiert auf die Zeit vor dem Neustart...)

Was nun? Ignorieren und einfach hoffen, dass so etwas nicht noch einmal passiert und dann erst weiterforschen?

Freue mich über Tipps
Grüsse
Florian
 

Anhänge

  • Bild 2.jpg
    Bild 2.jpg
    209,3 KB · Aufrufe: 567
Warum die Kiste langsam war ist deutlich zu sehen - er ist mit Swappen beschäftigt.

Ursache kann man so an sich nicht sagen - evtl. bist Du auf ein DOS gestoßen, evtl. ist an der Kiste was falsch konfiguriert bzw. in einer Anwendung nicht optimal eingestellt.

Auf jeden Fall haben die Apache-Prozesse eine zu hohe Speicherauslastung, da scheint also irgendwo ein Memory-Leak zu liegen...
 
D.h. der TOP Ausgabe zufolge würdest Du auch sagen, dass das ehr nichts mit der neuen Datenbankabfrage wegen der Bilingualität und auch nichts mit MySQL zu tun hat?!


Grüsse
Florian
 
nicht zwingend - irgendwas sorgt dafür, daß die Apaches viel Speicher fressen. Das kann auch eine Datenbankabfrage sein, wenn z.B. eine zu große Ergebnismenge oder entsprechende temp. Daten dabei entstehen.

Ohne Code-Review und evtl. SQL-Analyse kann man da nichts 100% sagen.
 
Evtl. liegt es daran, dass einfach zuviele Apache-Subprozesse laufen. Normal ist es so konfiguriert, dass bis zu 150 gleichzeitig Anfragen in Spitzenzeiten bearbeiten. (Oder wenn da irgendwo Java läuft, dann weißt du schon, wo das Problem herkommt.)
 
Ich glaube, da ist mein Server ganz normal konfiguriert:
<IfModule prefork.c>
# number of server processes to start
# http://httpd.apache.org/docs/2.2/mod/mpm_common.html#startservers
StartServers 5
# minimum number of server processes which are kept spare
# http://httpd.apache.org/docs/2.2/mod/prefork.html#minspareservers
MinSpareServers 5
# maximum number of server processes which are kept spare
# http://httpd.apache.org/docs/2.2/mod/prefork.html#maxspareservers
MaxSpareServers 10
# highest possible MaxClients setting for the lifetime of the Apache process.
# http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit
ServerLimit 150
# maximum number of server processes allowed to start
# http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients
MaxClients 150
# maximum number of requests a server process serves
# http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild
MaxRequestsPerChild 10000
</IfModule>

Der Server ist ein AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ mit 1GB RAM, wobei irgndwie vom Kernel 128 MB der Graphik wohl zugeordnet sind (warum auch immer :???: ).

Jetzt habe ich aber mal zwei weitere Fragen.

Die Speicherauslastung sieht aktuell so aus:
Gesamt 877.48 MB
Verwendet 812.84 MB
Frei 64.63 MB
Gemeinsam verwendet 0 B
Puffer 29.70 MB
Im Zwischenspeicher 342.23 MB
Nutzung 53%

Ich sehe, dass kaum Speicher frei ist, aber es einen Puffer und einen Zwischenspeicher gibt. Das scheinen ja beides Bereiche zu sein, die noch zur Verfügung stehen, oder?
Wann ist den Speicher noch frei und wann wandert er in den Puffer?


Die zweite Frage:
Gestern Abend habe ich den Server noch einmal dabei erwischt eine etwas höhere Load zu haben. Sie lag bei ca. 7.
Gibt es ein Tool, mit dem ich den Server diesbezüglich mal besser beobachten kann? Also so etwas wie ein Tages-EKG für meinen Server, dass mir sagt, wasnn die Load wie hoch war und vielleicht auch noch analysiert, wo die Last entstand (CPU, RAM, Festplatte...)? Wer weiß, ob das regemäßig vorkommt ;)
 
div. Monitoring-Umgebungen oder -Lösungen, einfache Shell-Scripte, ...

alternativ auch sowas wie Cacti, mrtg, ...
 
OK, die Frage war ungünstig gestellt, dass es soetwqas gibt habe ich mir fast gedacht.
Aber könnt Ihr mir etwas empfehlen, dass einfach in der Bedienung, schnell installiert (über Paketverwaltung) und leicht zu verstehen ist?
 
Hi

Cacti kannst du dir bequem über Paketmanager einbinden, hier ein Link zum Suse 10.3 Repo.

http://packages.opensuse-community.org/index.jsp?searchTerm=cacti&distro=openSUSE_103

..und hier ein Link zum Manual.

http://docs.cacti.net/node/2

cu
 
whois schrieb:
Hi
Cacti kannst du dir bequem über Paketmanager einbinden, hier ein Link zum Suse 10.3 Repo.

Hmm...
Ich weiß ja nicht, wo der Paketmanager das dann ablegen würde, aber mir war das zu heiß... Nachher gibt es irgendeinen Konflikt mit der Domainverwaltung von PLESK.

Ich habe daher für Cacti einfach mal einen neuen Nutzer und eigene Domain in Plesk angelegt und versucht (!) Cacti dort zum laufen zu bringen. Aber irgendwie funzt das nicht ganz so wie es sollte.
Zum einen werden kann Cacti scheinbar auf einige Programme nicht zugreifen (siehe Anhang) zum anderen behauptet Cacti, dass die von mir angegebene Version vom rrdtool nicht stimmt...

Nerv. Warum können die Dinge nicht einfach funktionieren. Irgendwie rauben mir Computer zu viel Lebenszeit.
 

Anhänge

  • bild_4_207.jpg
    bild_4_207.jpg
    131,4 KB · Aufrufe: 377
floezen schrieb:
Ich dachte eigentlich, dass das RRDtool soetwas ist?!
Nein. RRD ist eine Datenbank.

Für SNMP-Abfragen brauchst Du serverseitig natürlich einen SNMP-Dienst und clientseitig einen SNMP-Client. Das zugehörige Paket nennt sich meist net-snmp oder ähnlich.


jengelh schrieb:
Dann widerrum ist SNMP eins der langsamsten Monitoringtools die mir je untergekommen sind.
SNMP ist auch kein Monitoring-Tool. Es ist ein Protokoll.

Es wird oft von Monitoring-Tools verwendet, da so gut wie jede ernsthafte und der Überwachung werte Hardware / Software einen SNMP-"Zugang" zur Verfügung stellt.
 
Oben