Ram dauert voll

Hallo!
Bitte auch noch Informationen zur eingesetzten Linux Distribution nachliefern. Irgendwie tippe ich auf (Open)Suse - aber deine default-server.conf sieht irgendwie merkwürdig aus. Wir suchen Angaben wie StartServers, MinSpareServers, MaxSpareServers & MaxClients.

mfG
Thorsten
 
Hey,

danke für die schnellen Antworten

Also ich habe SuSe mit Plesk, ist nen vServer bei Strato.

Wenn Du es irgendwann mal machst, kann das Problem nicht so dringend sein.
Ich kann ja nicht alles während der Arbeit machen!
 
SuSe 11
Plesk 9.2.1
Starto VServer paket A, nicht mehr im Angebot
10GB space, und leider weiß ich gerade den ram nicht mehr :-(
 
Code:
#!/usr/bin/perl
 
###############################################################################
# vzstats.pl
#
# this script reads /proc/user_beancounters on openvz HNs and VEs and displays
# the values in human-readable format (megabytes/kilobytes).
#
# The script can be distributed freely for everybody who finds it usable.
#
# Christian Anton <mail |_at_| christiananton.de> 2008-09-18
 
 
 
open(BEANS,"/proc/user_beancounters");
chomp ($arch = `uname -m`);
 
sub check_maxulong {
	my $number = shift;
 
	if ($arch eq "x86_64") {
		if ($number == 9223372036854775807) {
			return 1;
		} else {
			return undef;
		}
	} else {
		if ($number == 2147483647) {
			return 1;
		} else {
			return undef;
		}
	}
}
 
sub recalc_bytes {
	my $bytes = shift;
 
	if (defined(&check_maxulong($bytes))) { return "MAX_ULONG"; }
 
	my $kbytes = $bytes / 1024;
	my $ret;
 
	# if over 1mb, show mb values
	if ($kbytes > 1024) {
		my $mbytes = $kbytes / 1024;
		$ret = sprintf("%.2f", $mbytes) . " mb";
		return $ret;
	} else {
		$ret = sprintf("%.2f", $kbytes) . " kb";
		return $ret;
	}
}
 
sub recalc_pages {
	my $pages = shift;
 
	if ($pages == 0) { return "0"; }
	if (defined(&check_maxulong($pages))) { return "MAX_ULONG"; }
 
	my $kbytes = $pages * 4;
	my $ret;
 
	if ($kbytes > 1024) {
		my $mbytes = $kbytes / 1024;
		$ret = sprintf("%.2f", $mbytes) . " mb";
		return $ret;
	} else {
		$ret = sprintf("%.2f", $kbytes) . " kb";
		return $ret;
	}
}
 
sub recalc_nothing {
	my $number = shift;
	if (defined(&check_maxulong($number))) { return "MAX_ULONG"; }
 
	return $number;
}
 
sub printline {
	my $mode = shift; # 0=normal, 1=bytes, 2=pages
	my $ident = shift;
	my $held = shift;
	my $maxheld = shift;
	my $barrier = shift;
	my $limit = shift;
	my $failcnt = shift;
 
	if ($mode == 0) {
		printf ("%-15s",$ident);
		printf ("%18s",&recalc_nothing($held));
		printf ("%21s",&recalc_nothing($maxheld));
		printf ("%21s",&recalc_nothing($barrier));
		printf ("%21s",&recalc_nothing($limit));
		printf ("%21s",$failcnt);
		print "\n";
	} elsif ($mode == 1) {
		printf ("%-15s",$ident);
		printf ("%18s",&recalc_bytes($held));
		printf ("%21s",&recalc_bytes($maxheld));
		printf ("%21s",&recalc_bytes($barrier));
		printf ("%21s",&recalc_bytes($limit));
		printf ("%21s",$failcnt);
		print "\n";
	} elsif ($mode == 2) {
		printf ("%-15s",$ident);
		printf ("%18s",&recalc_pages($held));
		printf ("%21s",&recalc_pages($maxheld));
		printf ("%21s",&recalc_pages($barrier));
		printf ("%21s",&recalc_pages($limit));
		printf ("%21s",$failcnt);
		print "\n";
	}
}
 
sub work_line {
	my $line = shift;
	my $ident = $line;
	my $held = $line;
	my $maxheld = $line;
	my $barrier = $line;
	my $limit = $line;
	my $failcnt = $line;
 
 
 
	$ident =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$1/;
	$held =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$2/;
	$maxheld =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$3/;
	$barrier =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$4/;
	$limit =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$5/;
	$failcnt =~ s/^\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/$6/;
 
	# 0=normal, 1=bytes, 2=pages
	if ($ident eq "dummy") {
		# do nothing, skip this line
	} elsif ($ident =~ /pages/) {
		&printline(2,$ident,$held,$maxheld,$barrier,$limit,$failcnt);
	} elsif ($ident =~ /^num/) {
		&printline(0,$ident,$held,$maxheld,$barrier,$limit,$failcnt);
	} else {
		&printline(1,$ident,$held,$maxheld,$barrier,$limit,$failcnt);
	}
 
}
 
sub print_header {
	my $uid = shift;
 
	print "#####################################################################################################################\n";
	print "BEANS FOR UID $uid\n";
	print "resource                     held              maxheld              barrier                limit              failcnt\n";
}
 
# now eat your beans baby
while (<BEANS>) {
	chomp($line = $_);
 
	# skip processing of headline
	if ($line =~ /^\s+uid/) {
		# do nothing, skip this
	} elsif ($line =~ /^Ver/) {
		# do nothing, skip this
	} elsif ($line =~ /^\s+\d+:\s+kmem/) {
		$uid = $line;
		$line =~ s/^(\s+)(\d+):/$1/;
		$uid =~ s/^(\s+)(\d+):.*$/$2/;
		&print_header($uid);
		&work_line($line);
	} else {
		&work_line($line);
	}
}
 
close(BEANS);

Führe mal obiges Script auf deinem System aus. Dieses Script wertet /proc/user_beancounters aus und zeigt die Werte als MB an.

Wie gesagt. Script in eine Datei kopieren (mit der Endung .pl) und mit chmod +x ausführbar machen. Resultat hier posten.
 
Code:
BEANS FOR UID 1443240
resource                     held              maxheld              barrier                limit              failcnt
kmemsize                  5.46 mb              5.47 mb             16.24 mb             18.74 mb                    0
lockedpages                     0                    0             14.84 mb             16.00 mb                    0
privvmpages             314.07 mb            314.81 mb            540.06 mb            791.28 mb                 6440
shmpages                  7.92 mb              7.92 mb            512.00 mb            512.00 mb                    0
numproc                        71                   72                  232                  232                    0
physpages               133.60 mb            133.69 mb                    0            MAX_ULONG                    0
vmguarpages                     0                    0            259.38 mb            MAX_ULONG                    0
oomguarpages            133.65 mb            133.73 mb            MAX_ULONG            MAX_ULONG                    0
numtcpsock                     28                   28                  500                  500                    0
numflock                        9                    9                  200                  232                    0
numpty                          0                    0                   64                   64                    0
numsiginfo                      0                    1                  512                  512                    0
tcpsndbuf               246.75 kb            238.01 kb              4.47 mb              5.82 mb                    0
tcprcvbuf               448.00 kb            432.00 kb              4.47 mb              5.82 mb                    0
othersockbuf             80.11 kb             80.79 kb              1.43 mb              3.88 mb                    0
dgramrcvbuf               0.00 kb              0.00 kb            234.38 kb            256.00 kb                    0
numothersock                   56                   56                  382                  382                    0
dcachesize              764.87 kb            768.50 kb              2.09 mb              2.21 mb                    0
numfile                      2413                 2459                 5432                 5432                    0
numiptent                      54                   54                  128                  128                    0

Was für ein besonderes Ergebnis, genau das gleiche wie vorher nur in mb
 
Was für ein besonderes Ergebnis, genau das gleiche wie vorher nur in mb

Genau. Das steht ja auch genau so im Quellcode drinn. Du hast nicht genug Arbeitsspeicher. Upgrade halt auf nen größeren Vserver oder reduziere nutzung des Arbeitsspeichers.
 
Die Frage ist, was den Arbeitsspeicher verbraucht und wie man die Anwendung vernüftig einstellen kann das der Server nicht direkt am limit ist und alle Anwendungen noch sauber laufen können.

Aber danke sehr für die Erklärung. Kann mir dennoch einer die obigen Tabellen Bezeichnungen auf deutsch erklären? thx
 
Auf dieser Seite findest du sämtliche Beschreibungen der Parameter. Du kannst das ganze ja durch nen Translator laufen lassen. Vieleicht kommt dabei ja was raus :-)
 
Die Frage ist, was den Arbeitsspeicher verbraucht und wie man die Anwendung vernüftig einstellen kann

Den ersten Teil der Frage beantwortet Dir die Ausgabe mit top. Für die zweite Frage lohnt es sich ersteinmal notos Tuning-Primer-Thread durchzulesen (-> Sticky Thread der im SQL-Forum ganz oben steht). Dort werden mit dem Mysqld und dem Apachen die beiden Hauptverdächtigen für Dein Problem behandelt.
 
Hallo,
da es hier ja noch nicht ganz zu einer Fehlerfindung gekommen ist, möchte ich mich auch mal einmischen :p

Ich habe im Grunde das gleiche Problem. Hier erstmal ein paar Daten zu meinem vServer:

Anbieter: vanager.de
Paket: Profi.VPS
Webspace: 16 GB
Traffic pro Monat: 600 GB
Arbeitsspeicher (RAM): 384 MB
Garantierte CPU-Leistung: 200 %
OS: Debian 5.0 lenny mit Confix 3.3.5
uname -a: 2.6.18-028stab062.3-ent #1 SMP Thu Mar 26 15:12:05 MSK 2009 i686 GNU/Linux
per apt-get alles auf dem neuesten Stand
neben apache und mysql laufen noch ein teamspeak 2 server mit 20 slots (eigentlich immer nur 2-4 genutzt), sowie ein half-life dedicated server (bzw. counter-strike 1.6) mit 6 slots, meißtens nur mit 4 slots genutzt.
dazu läuft noch denyhosts, welches unerlaubte zugriffe aufs sshd sperrt.
ports sind nur für http, ftp, cs und ts2 server offen.

zum problem: mein ram ist im idle betrieb so bei 60%, wenn auf den teamspeak und cs server leute connected sind gehts vielleicht auf max. 80% hoch. das problem ist jedoch, wenn die gehosteten websiten (2 wordpress systeme) aufgerufen werden gibts probleme mit der ramzuordnung bzw. der ram erreicht kritische werte. wenn ich z.b. den apache und mysqld ausschalte und der cs und ts server weiterlaufen liegt die ramauslastung bei ~30%. die cpu auslastung liegt nie über 5-10%, egal ob jetzt alle dienste laufen oder apache und mysqld aus sind. d.h. das problem liegt anscheinend beim apache (oder mysqld).

hier noch weitere daten, wie beim threadersteller gefordert:

ps faux:
Code:
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   1984   696 ?        Ss   01:39   0:01 init [2]
root     29837  0.0  0.1   1696   592 ?        Ss   01:39   0:00 /sbin/syslogd
root     29846  0.0  0.1   5276  1024 ?        Ss   01:39   0:00 /usr/sbin/sshd
root     17700  0.0  0.4   8004  2560 ?        Ss   01:42   0:00  \_ sshd: root@pts/1
root     17771  0.0  0.2   2840  1612 pts/1    Ss   01:42   0:00      \_ -bash
root      5667  0.0  0.1   2296   848 pts/1    R+   02:14   0:00          \_ ps faux
root     30008  0.0  0.0   1836   432 ?        S    01:39   0:00 /usr/sbin/courierlogger -pid=/var/run/courier/authdaemon/pid -start /usr/lib/courier/courier-
root     30010  0.0  0.1   2004   608 ?        S    01:39   0:00  \_ /usr/lib/courier/courier-authlib/authdaemond
root     30017  0.0  0.0   2004   232 ?        S    01:39   0:00      \_ /usr/lib/courier/courier-authlib/authdaemond
root     30018  0.0  0.0   2004   232 ?        S    01:39   0:00      \_ /usr/lib/courier/courier-authlib/authdaemond
root     30019  0.0  0.0   2004   232 ?        S    01:39   0:00      \_ /usr/lib/courier/courier-authlib/authdaemond
root     30020  0.0  0.0   2004   232 ?        S    01:39   0:00      \_ /usr/lib/courier/courier-authlib/authdaemond
root     30021  0.0  0.0   2004   232 ?        S    01:39   0:00      \_ /usr/lib/courier/courier-authlib/authdaemond
root     30025  0.0  0.0   1836   352 ?        S    01:39   0:00 /usr/sbin/courierlogger -pid=/var/run/courier/imapd.pid -start -name=imapd /usr/sbin/couriert
root     30026  0.0  0.1   1940   580 ?        S    01:39   0:00  \_ /usr/sbin/couriertcpd -address=0 -maxprocs=40 -maxperip=20 -nodnslookup -noidentlookup 14
root     30033  0.0  0.0   1836   352 ?        S    01:39   0:00 /usr/sbin/courierlogger -pid=/var/run/courier/pop3d.pid -start -name=pop3d /usr/sbin/couriert
root     30034  0.0  0.1   1940   580 ?        S    01:39   0:00  \_ /usr/sbin/couriertcpd -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup -address=0 110
root     30051  0.0  0.8   8388  4812 ?        S    01:39   0:01 python /usr/bin/denyhosts.py --daemon --purge --sync --config=/usr/share/denyhosts/denyhosts.
root     30174  0.0  0.3   5480  1800 ?        Ss   01:39   0:00 /usr/lib/postfix/master
postfix  30185  0.0  0.3   5536  1888 ?        S    01:39   0:00  \_ qmgr -l -t fifo -u
postfix  30187  0.0  0.3   5492  1784 ?        S    01:39   0:00  \_ pickup -l -t fifo -u -c
postfix   5943  0.0  0.4   5688  2384 ?        S    02:09   0:00  \_ local -t unix
root     30236  0.0  0.1   8236   752 ?        Ss   01:39   0:00 /usr/sbin/saslauthd -a pam shadow -n 0 -c -m /var/spool/postfix/var/run/saslauthd -n 3
root     30260  0.0  0.0   8236   472 ?        S    01:39   0:00  \_ /usr/sbin/saslauthd -a pam shadow -n 0 -c -m /var/spool/postfix/var/run/saslauthd -n 3
root     30261  0.0  0.0   8236   356 ?        S    01:39   0:00  \_ /usr/sbin/saslauthd -a pam shadow -n 0 -c -m /var/spool/postfix/var/run/saslauthd -n 3
root     30277  0.0  0.1   2356   856 ?        Ss   01:39   0:00 /usr/sbin/xinetd -pidfile /var/run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
postgrey 30309  0.0  1.4  11156  8052 ?        Ss   01:39   0:00 /usr/sbin/postgrey --pidfile=/var/run/postgrey.pid --daemonize --inet=127.0.0.1:60000
ts       30327  0.0  0.3  56592  1788 ?        Sl   01:39   0:01 ./server_linux -PID=tsserver2.pid
root     30339  0.0  0.1   3648   952 ?        S    01:39   0:00 /usr/sbin/vsftpd
root     30354  0.0  0.1   2040   880 ?        Ss   01:39   0:00 /usr/sbin/cron
root     32176  0.0  0.1   2372   920 ?        S    02:14   0:00  \_ /USR/SBIN/CRON
root     32271  0.0  0.1   2436  1016 ?        Ss   02:14   0:00      \_ /bin/sh -c sleep 115; /root/confixx/confixx_counterscript.pl
root     32273  0.0  0.0   1644   412 ?        S    02:14   0:00          \_ sleep 115
hlds     30380  0.0  0.1   2852   936 ?        Ss   01:39   0:00 SCREEN -AmdS HLDS ./hlds_run -game cstrike +maxplayers 6 +map de_nuke -port 27015 +sys_ticrat
hlds     30388  0.0  0.2   2568  1208 pts/0    Ss+  01:39   0:00  \_ /bin/sh ./hlds_run -game cstrike +maxplayers 6 +map de_nuke -port 27015 +sys_ticrate 2500
hlds     31783  3.1 10.6  68244 58092 pts/0    Sl+  01:39   1:05      \_ ./hlds_amd -game cstrike +maxplayers 6 +map de_nuke -port 27015 +sys_ticrate 2500 -pi
root     24276  0.1  1.9  40028 10576 ?        Ss   02:12   0:00 /usr/sbin/apache2 -k start
root     24279  0.0  0.2   3444  1488 ?        S    02:12   0:00  \_ /usr/bin/perl /root/confixx/pipelog.pl
www-data 24298  1.4  3.1  47812 17012 ?        S    02:12   0:01  \_ /usr/sbin/apache2 -k start
www-data 24300  1.4  2.9  47396 15888 ?        S    02:12   0:01  \_ /usr/sbin/apache2 -k start
www-data 24543  0.1  1.6  40824  8960 ?        S    02:12   0:00  \_ /usr/sbin/apache2 -k start
www-data 24552  0.7  1.8  41592  9872 ?        S    02:12   0:00  \_ /usr/sbin/apache2 -k start
www-data 24565  0.4  1.7  41344  9640 ?        S    02:12   0:00  \_ /usr/sbin/apache2 -k start
www-data 24574  0.3  1.7  41336  9368 ?        S    02:12   0:00  \_ /usr/sbin/apache2 -k start
root     24341  0.0  0.2   2484  1156 pts/1    S    02:12   0:00 /bin/sh /usr/bin/mysqld_safe
mysql    24421  0.5  1.6  56932  9188 pts/1    Sl   02:12   0:00  \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run
root     24422  0.0  0.0   1632   536 pts/1    S    02:12   0:00  \_ logger -p daemon.err -t mysqld_safe -i -t mysqld

free -m:
Code:
             total       used       free     shared    buffers     cached
Mem:           534        302        232          0          0          0
-/+ buffers/cache:        302        232
Swap:            0          0          0

cat /proc/user_beancounters:
Code:
Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
     xxxx:  kmemsize        5430025    5450610    9813565   10794921          0
            lockedpages           0          0        331        331         28
            privvmpages       77173      77211     136843     150528        115
            shmpages            782        782      38400      38400          0
            dummy                 0          0 2147483647 2147483647          0
            numproc              58         58        240        240          0
            physpages         28540      28544          0 2147483647          0
            vmguarpages           0          0      98304 2147483647          0
            oomguarpages      28540      28544      98304 2147483647          0
            numtcpsock           12         12        240        240          0
            numflock              9          9        262        288          0
            numpty                2          2         16         16          0
            numsiginfo            0          1       1024       1024          0
            tcpsndbuf        120744     120744    1589979    2261723          0
            tcprcvbuf        183296     183296    1589979    2261723          0
            othersockbuf     152048     152748     794989    1466733          0
            dgramrcvbuf           0       1212     794989     794989          0
            numothersock        105        105        240        240          0
            dcachesize       592736     595391    1511424    1556766          0
            numfile            1966       1975       3840       3840          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            23         23         35         35          0

die httpd.conf ist leer. ich denke mal weil confixx das irgendwie abgeändert hat. meine apache2.conf sagt aber u.a. folgendes:
Code:
# prefork MPM
<IfModule mpm_prefork_module>
StartServers       3
MinSpareServers    3
MaxSpareServers    6
MaxClients        20
    MaxRequestsPerChild   0
</IfModule>

# worker MPM
<IfModule mpm_worker_module>
StartServers       1
MaxClients        10
MinSpareThreads    1
MaxSpareThreads    4
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

spamasassin und das ganze zeug hab ich aus performance gründen ausgestellt.

würde es evtl. etwas bringen ein swap file anzulegen? probiert hab ichs nicht, ist mir nur jetzt beim schreiben gerade so in den sinn gekommen. von den 16gb sind ca. 1gb erst mit daten belegt und wie gesagt die cpu kommt auch nicht über 10%.
ansonsten: was kann man da sonst machen? apache, mysql, teamspeak und cs 1.6 server sind die sachen, die laufen müssen! vielleicht gibts ja noch sachen, die man zusätzlich beenden könnte.
 
Last edited by a moderator:
Hallo Tobi@s,

Dein Fehler liegt einfach und allein hier: Gameserver auf einem Vserver.

Vserver sind dafür einfach nicht ausgelegt (und von manchen Hostern sogar verboten)
 
Das kann nicht sein! Wie gesagt, wenn das alles im idle Betrieb läuft gibts ja keine Probleme, aber wenn die Websiten aufgerufen werden, geht die Memoryauslastung so hoch. Guck doch mal auf dem ps faux Auszug, den ich gepostet habe, die Auslastung von %MEM vom apachen und vom CS Server.
 
Du hast dir deine Lösung doch schon selber präsentiert.

Es liegt am Apache+Mysql. Die verbrauchen anscheinend zuviel Ram, also musst du denen nur beibringen das sie weniger verbrauchen. Dafür kannst du die Foren Suche oder google verwenden, da gibts nen Haufen Threads und Tutorials für.

Vlt. auch anstatt dem Apache einfach lighthttpd verwenden, das soll weniger Ressourcen verbrauchen.

Übrigens hat Linuxadmin dich schon auf das hingewiesen was ich jetzt geschrieben habe :-)
 
Back
Top