VServer Perfomance (bitte mal kontrollieren!)

sky2high

New Member
Hallo.

Also ich habe schon viel hier gelesen und einige Tipps durchgeführt. Nun naja ich fände es gut wenn sich jemand mit viel Ahnung mal meine Daten anschauen könnte und mir sagen könnte was noch zu optimieren ist. Auf dem Server läuft ein phpBB3 Forum und eine fast komplett statische Seite die nur gelegentlich Datenbankzugriff brauch.

Mein VServer ist bei Host-Europe und hat 128MB Ram garantiert, 512MB Ram dynamisch. Plesk ist normalerweise aus.

top:

Code:
top - 22:47:31 up 5 days, 14:29,  1 user,  load average: 0.27, 0.27, 0.18
Tasks:  38 total,   1 running,  36 sleeping,   0 stopped,   1 zombie
Cpu(s):  1.5% us,  0.3% sy,  0.0% ni, 98.2% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   2587388k total,  2554744k used,    32644k free,    95416k buffers
Swap:  8193108k total,    68412k used,  8124696k free,   963348k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0   616  256  224 S  0.0  0.0   0:00.10 init
26331 root      16   0  1484  596  504 S  0.0  0.0   0:00.59 syslogd
26337 root      18   0  4008  804  576 S  0.0  0.0   0:00.00 saslauthd
26338 root      18   0  4008  476  248 S  0.0  0.0   0:00.00 saslauthd
26361 root      15   0  2716  716  548 S  0.0  0.0   0:00.00 couriertcpd
26371 root      15   0  2616  768  608 S  0.0  0.0   0:00.00 courierlogger
26374 root      25   0  2712  704  540 S  0.0  0.0   0:00.00 couriertcpd
26376 root      25   0  2484  620  472 S  0.0  0.0   0:00.00 courierlogger
26383 root      15   0  2712  712  548 S  0.0  0.0   0:00.00 couriertcpd
26389 root      16   0  2616  768  608 S  0.0  0.0   0:00.00 courierlogger
26394 root      25   0  2712  704  540 S  0.0  0.0   0:00.00 couriertcpd
26397 root      25   0  2484  620  472 S  0.0  0.0   0:00.00 courierlogger
26462 root      16   0  2144  872  708 S  0.0  0.0   0:00.12 xinetd
26463 root      16   0  4632 1232  864 S  0.0  0.0   0:02.00 sshd
26532 qmails    16   0  1452  452  372 S  0.0  0.0   0:04.81 qmail-send
26534 qmaill    16   0  1408  428  372 S  0.0  0.0   0:00.13 splogger
26535 root      16   0  1440  344  260 S  0.0  0.0   0:00.00 qmail-lspawn

cat /proc/user_beancounters:

Code:
Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
     18225: kmemsize        4393961    4412432   28207404   31028144          0
            lockedpages           0          0       1377       1377          0
            privvmpages       72171      72273     134100     149000         21
            shmpages           5792       5792      50000      50000          0
            dummy                 0          0          0          0          0
            numproc              57         57        688        688          0
            physpages         23640      23640          0 2147483647          0
            vmguarpages           0          0      32768 2147483647          0
            oomguarpages      23697      23697      32768 2147483647          0
            numtcpsock           21         21        688        688          0
            numflock             11         12       1000       1100          0
            numpty                1          1         68         68          0
            numsiginfo            0          0       1024       1024          0
            tcpsndbuf        192296     192296    6584420    9402468          0
            tcprcvbuf        344064     344064    6584420    9402468          0
            othersockbuf      17888      20824    3292210    6110258          0
            dgramrcvbuf           0       2236    3292210    3292210          0
            numothersock         19         21        688        688          0
            dcachesize            0          0    6155930    6340608          0
            numfile            2046       2048      11008      11008          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            14         14 2147483647 2147483647          0

server-tuning.conf:

Code:
# prefork MPM
<IfModule prefork.c>
        # number of server processes to start
         StartServers 1
        # minimum number of server processes which are kept spare
         MinSpareServers 1
        # maximum number of server processes which are kept spare
        MaxSpareServers      2
        # highest possible MaxClients setting for the lifetime of the Apache process.
         ServerLimit 150
        # maximum number of server processes allowed to start
         MaxClients 50
        # maximum number of requests a server process serves
        MaxRequestsPerChild  5000
</IfModule>

HostnameLookups off


Desweiteren habe ich das tuning-primer Script mal laufen lassen jedoch bekomme ich zwischendrin Fehlermeldungen, also wenn sich das mal jemand anschauen könnte:

Code:
        -- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery -

MySQL Version 4.1.13 i686

/usr/bin/tuning-primer.sh: line 382: bc: command not found
/usr/bin/tuning-primer.sh: line 383: bc: command not found
/usr/bin/tuning-primer.sh: line 384: bc: command not found
/usr/bin/tuning-primer.sh: line 385: bc: command not found
/usr/bin/tuning-primer.sh: line 386: bc: command not found
/usr/bin/tuning-primer.sh: line 387: bc: command not found
Uptime =  days  hrs  min  sec
Avg. qps = 1
Total Questions = 321049
Threads Connected = 1

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html

SLOW QUERIES
Current long_query_time = 5 sec.
You have 1 out of 321061 that take longer than 5 sec. to complete
The slow query log is NOT enabled.
Your long_query_time seems to be fine

WORKER THREADS
Current thread_cache_size = 0
Current threads_cached = 0
Current threads_per_sec = 1
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 35
Current threads_connected = 1
Historic max_used_connections = 8
The number of used connections is 22% of the configured maximum.
Your max_connections variable seems to be fine.

MEMORY USAGE
/usr/bin/tuning-primer.sh: line 1117: bc: command not found
/usr/bin/tuning-primer.sh: line 1118: bc: command not found
/usr/bin/tuning-primer.sh: line 1142: bc: command not found
/usr/bin/tuning-primer.sh: line 1145: bc: command not found
/usr/bin/tuning-primer.sh: line 1146: bc: command not found
/usr/bin/tuning-primer.sh: line 1148: bc: command not found
/usr/bin/tuning-primer.sh: line 1150: [: -gt: unary operator expected
/usr/bin/tuning-primer.sh: line 344: [: max_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 350: [: max_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 356: [: max_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 363: export: `0=max_memoryHR': not a valid identifier
Max Memory Ever Allocated :  bytes
/usr/bin/tuning-primer.sh: line 344: [: per_thread_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 350: [: per_thread_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 356: [: per_thread_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 363: export: `0=per_thread_buffersHR': not a valid identifier
Configured Max Per-thread Buffers :  bytes
/usr/bin/tuning-primer.sh: line 344: [: global_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 350: [: global_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 356: [: global_buffersHR: integer expression expected
/usr/bin/tuning-primer.sh: line 363: export: `0=global_buffersHR': not a valid identifier
Configured Max Global Buffers :  bytes
/usr/bin/tuning-primer.sh: line 344: [: total_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 350: [: total_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 356: [: total_memoryHR: integer expression expected
/usr/bin/tuning-primer.sh: line 363: export: `0=total_memoryHR': not a valid identifier
Configured Max Memory Limit :  bytes
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Total System Memory :  G
Max memory limit seem to be within acceptable norms

KEY BUFFER
/usr/bin/tuning-primer.sh: line 325: bc: command not found
/usr/bin/tuning-primer.sh: line 599: bc: command not found
/usr/bin/tuning-primer.sh: line 600: bc: command not found
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current MyISAM index space =  M
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current key_buffer_size =  M
Key cache miss rate is 1 : 239
Key buffer fill ratio =  %
/usr/bin/tuning-primer.sh: line 619: [: -ge: unary operator expected
/usr/bin/tuning-primer.sh: line 623: [: -le: unary operator expected
Your key_buffer_size seems to be fine

QUERY CACHE
Query cache is supported but not enabled
Perhaps you should set the query_cache_size

SORT OPERATIONS
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current sort_buffer_size =  K
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current record/read_rnd_buffer_size =  M
Sort buffer seems to be fine

JOINS
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current join_buffer_size =  K
You have had 97 queries where a join could not use an index properly
You have had 53 joins without keys that check for key usage after each row
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
If you are unable to optimize your queries you may want to increase your
join_buffer_size to accommodate larger joins in one pass.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

OPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 72 tables
You have a total of 365 tables
You have 72 open tables.
Current table_cache hit rate is 1%, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current max_heap_table_size =  M
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current tmp_table_size =  M
Of 15550 temp tables, 1% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Created disk tmp tables ratio seems fine

TABLE SCANS
/usr/bin/tuning-primer.sh: line 325: bc: command not found
Current read_buffer_size =  K
Current table scan ratio = 4 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 29675
Your table locking seems to be fine
 
Von der Auslastung her sieht alles OK aus.

Für das Script musst du bc (The GNU bc arbitrary precision calculator language) installieren. Wie du das machst, weißt du hoffentlich ;)
 
max_connections würde ich machen wie MaxClients, also 50

/etc/my.cnf
Code:
key_buffer = 512K
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
join_buffer_size = 2M
myisam_sort_buffer_size = 4M
thread_cache = 8
query_cache_size = 512K
max_connections = 50
long_query_time = 2
wenn RAM mal nicht reichen sollte, machst du

sort_buffer, read_buffer und table_cache halb so groß.

Und in der Apache conf. würde ich noch
Code:
Timeout 30
KeepAlive On
MaxKeeAliveRequests 150
KeepAliveTimeout 2
einstellen. Wenn beim Aufruf der Seite mehr als 150 Objekte geladen werden müssen z.B. .gif Grafiken, dann erhöhe den Wert für MaxKeepAliveRequests entsprechend z.B. auf 200 ect.

Ich z.B. hab die Buffers + Caches so klein, dass bei max_connections = 20 die privvmpages noch unter Barrier bleiben. Viel mehr packt mein rootDS nicht. Das liegt daran, weil ich nur ~ 170 MB frei hab, hätte ich 1 GB RAM hätte ich 825 MB zur Verfügung und hätte ~ max_connections = 100
 
Last edited by a moderator:
Hallo und danke für eure Antworten.

Leider bin ich mit Linux auch noch nicht so erfahren, daher
weiß ich nicht wie ich bc installieren kann. Könnte mir jemand schreiben wo ich das richtige downloade (für Suse Linux) und wie ich dies dann installiere?

Das einzige was ich per SSH nun einigermaßen kann ist Dateien editieren mit vi und halt die einfachsten Standardbefehle wie cd,md,rm,wget usw..
 
Code:
yast -i bc
oder
Yast aufrufen, Punkt Software - Software installieren - suchen - bc eingeben - dann suchen - bc markieren -mit der der Leertaste so lange drücken bis in i kommt - dann auf Übernehmen. Fertig.
 
Apache + MySQL sollten so eingestellt sein, daß beim benchmark deine privmpages (beancounters) unterhalb von barrier bleiben.

Code:
ab -n 50 -c 50 http://www.deine_domain.de/
-n sind die Requests (MaxKeepAliveRequests) und -c sind die gleichzeitigen TCP Verbindungen (MaxClients, max_connections)

Wenn du bei privvmpages failcnt bekommst, mußt du die /etc/my.cnf Buffers + Caches kleiner machen u. table_cache veringern.
 
Ich bin zwar nicht noto, aber ich erlaube mir, die Frage trotzdem zu beantworten.

ab ist ein Benchmarking Tool für den Apache. Zu finden ist das Tool in dem Paket apache2-utils.
 
Last edited by a moderator:
Code:
TABLE CACHE
Current table_cache value = 72 tables
You have a total of 365 tables
You have 72 open tables.
Current table_cache hit rate is 9%, while 100% of your table cache is in use
[COLOR="Red"]You should probably increase your table_cache[/COLOR]

Irgendwie habe ich das obige immer, aber ich kann mir nicht vorstellen das es gut ist den Cache noch weiter zu erhöhen?
 
entscheidend sind die gleichzeitigen TCP Verbindungen, also max_connections und dein verfügbarer RAM.

RAM = key_buffer + ((sort_buffer + read_buffer) * max_connections)

dazu kommen dann nochmal RAM für die open_tables und query_cache ect.

Beispiel:

key_buffer = 2M + ((sort_buffer = 512K + read_buffer = 128K) * max_connections = 50

wären dann 2048 + ((512 + 128) * 50) = 34048 = 34 MB RAM

würden wir 300 max_connections benötigen bräuchten wir mindestens

2048 + ((512 + 128) * 300) = 194048 = 194 MB RAM

Macht man die max_connections kleiner als benötigt, bekommen die Surfer ein Timeout. Also lassen wir die max_connetions und machen die Buffers + Caches kleiner.

Beispiel:

512 + ((128 + 12) * 300) = 42512 = 42,5 MB RAM

table_cache würden wir auf 32 reduzieren und net_buffer_length = 1K

Saug dir vpsmem.sh Script und lasse es laufen.
 
Last edited by a moderator:
Habe ich. Hier das Ergebnis:

Code:
 ----- VPS Speichernutzung ----      ---- Hardware Node Memory ----
 [XXXXXXXXXXXXXXXXX-----------]      Total:                 2527 MB
 Momentan:         57% Barriere      Frei:                    44 MB
 Fehlversuche:        21 Fehler      Buffers:                 78 MB
 ------------------------------      Cached:                 891 MB
 Momentan genutzt:       297 MB      ------- +/- buff/cache -------
 Maximal  genutzt:       297 MB      Used:                  1514 MB
 Barriere:               524 MB      Free:                  1013 MB
 Limit:                  582 MB      ------------ Swap ------------
 ------------------------------      Total Swap:            8001 MB
 Zugesichert:            128 MB      Free  Swap:            7934 MB
 ------------------------------      ------------------------------
 
achte darauf, daß MaxClients (Apache) und max_connections (MySQL) gleich groß eingestellt sind. Und zwar so groß wie tuning-primer.sh dir anzeigt.
Code:
MAX CONNECTIONS
Current max_connections = 20
Current threads_connected = 1
[COLOR="Red"]Historic max_used_connections = 21[/COLOR]

kannst ja mal einen Benchmark machen.
Code:
ab2 -n 100 -c [COLOR="Red"]21[/COLOR] http://www.deine_domain.com/

Wenn dein RAM nicht reicht, mußt du Buffers ect. kleiner machen.

Um zu sehen wieviele TCP Verbindungen (Connections) dein Server gerade hat, kannst du auch eingeben (copy + paste)
Code:
netstat -n |grep ESTAB|grep '\:80 '|wc -l
 
Last edited by a moderator:
Guten Tag.

Ich finde in YaSt kein apache2-utils. habe nach apache2 gesucht und einige Sachen gefunden jedoch nicht das richtige. Woran kann das liegen?
 
Back
Top