Apache2 auf Suse 9.3 zum Teil langsam bei phpBB Plus

mbg

New Member
Apache2 auf Suse 9.3 seit kurzem langsam bei phpBB Plus nach Login

Von einem auf den anderen Tag wurde mein Forum langsam.
Es hat ca. 2500 User und 200000 Beiträge. Die DB ist ca. 150 MB groß.

Maschine: AMD Opteron 148 mit 2GB RAM

Er swappt auch nicht und habe noch ca. 300 bis 600 MB RAM frei.

Wenn ich nicht eingeloggt bin ist alles verdammt schnell.
Portalseite (sind noch mehrere User online)
[ Zeit: 0.9434s ][ Queries: 52 (0.5660s) ]
Indexseite vom Forum:
[ Zeit: 0.4825s ][ Queries: 15 (0.1752s) ]

Sobald ich mich einlogge, steigt die Ladezeit für eine Seite auf ca. 4 bis 6 Sekunden. Auch wenn ich z.B. den Kalender abschalte ändert sich nichts.
(Ist eine Funktion, die einiges an Leistung kostet)

Es wurde nichts geändert, darum ist diese Verhalten verdammt komisch.

Wenn ich mich z.B. als normaler User einlogge, dann dauert der Login oder ein Seitenaufruf so lange:
[ Zeit: 5.6694s ][ Queries: 59 (0.8216s) ]
[ Zeit: 4.5273s ][ Queries: 26 (0.1964s) ]

So wie der erste Abschnitt sieht es aus, wenn viel los ist.

Der zweite Abschnitt spiegelt z.B. ein Posting aus.

Der dritte Abschnitt zeigt, wie ich mich gerade alleine einlogge. Die Anzeige von top steht dann ca. 3 Sekunden so da

Code:
22279 wwwrun    19   0 41044  28m 6280 R 14.3  1.4   0:03.46 httpd2-prefork 
22280 wwwrun    19   0 40596  27m 6268 R 13.9  1.4   0:03.24 httpd2-prefork 
22283 wwwrun    19   0 41168  28m 6324 R 12.9  1.4   0:03.43 httpd2-prefork 
22282 wwwrun    19   0 42160  29m 6376 R 12.3  1.5   0:09.15 httpd2-prefork 
22133 wwwrun    19   0 41380  28m 6544 R 10.9  1.4   0:11.89 httpd2-prefork 
22191 wwwrun    19   0 42576  29m 6340 R 10.3  1.5   0:20.56 httpd2-prefork 
22196 wwwrun    19   0 40940  28m 6344 R 10.3  1.4   0:03.27 httpd2-prefork 
22285 wwwrun    19   0 40664  27m 6268 R 10.3  1.4   0:03.14 httpd2-prefork 
22287 wwwrun    16   0 28920  16m 6164 R  4.3  0.8   0:00.13 httpd2-prefork 



22295 wwwrun    17   0 40788  27m 6232 R 47.9  1.4   0:01.72 httpd2-prefork 
22115 mysql     16   0  618m  77m 4136 R 27.2  3.8   0:17.27 mysqld 
22279 wwwrun    16   0 43200  30m 6324 R 11.0  1.5   0:04.93 httpd2-prefork 
22300 wwwrun    15   0 42592  29m 6376 S 10.0  1.5   0:06.26 httpd2-prefork 
22302 wwwrun    16   0 27064  14m 6256 R  3.6  0.7   0:00.50 httpd2-prefork 
    1 root      16   0   680  248  216 S  0.0  0.0   0:00.96 init 
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0 
    3 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/0 





22300 wwwrun    22   0 44048  31m 6396 R 99.9  1.5   0:18.76 httpd2-prefork 
    1 root      16   0   680  248  216 S  0.0  0.0   0:00.96 init 
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0 
    3 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/0 
    4 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper 
    9 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread 
   19 root      18  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid


Wenn ich z.B. Apache mit ab2 -n 1000 -c 10 teste erhalte ich folgende Werte:

1. Test mit html Seite:
Document Path: /index.html
Document Length: 4846 bytes

Concurrency Level: 10
Time taken for tests: 0.275188 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5117306 bytes
HTML transferred: 4860538 bytes
Requests per second: 3633.88 [#/sec] (mean)
Time per request: 2.752 [ms] (mean)
Time per request: 0.275 [ms] (mean, across all concurrent requests)
Transfer rate: 18158.50 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 1 2 0.8 2 8
Waiting: 0 1 1.0 2 8
Total: 1 2 0.8 2 8



2. Test mit php Seite:
Document Path: /portal.php
Document Length: 0 bytes

Concurrency Level: 10
Time taken for tests: 4.162284 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 323000 bytes
HTML transferred: 0 bytes
Requests per second: 240.25 [#/sec] (mean)
Time per request: 41.623 [ms] (mean)
Time per request: 4.162 [ms] (mean, across all concurrent requests)
Transfer rate: 75.68 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 13 14 0.7 14 23
Processing: 19 26 8.4 25 96
Waiting: 18 26 8.3 24 95
Total: 33 41 8.3 39 110
er swappt nicht habe noch ca. 300 MB RAM frei und swap ist ungenutzt



Ich habe mir jetzt noch die Mühe gemacht, einen mysql Benchmark laufen zu lassen. Der sieht gut aus:

Vergleich gibts hier:
MySQL - Die MySQL Benchmark Suit - TYPO3forum.net



alter-table: Total time: 35 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU)
ATIS: Total time: 6 wallclock secs ( 4.02 usr 0.88 sys + 0.00 cusr 0.00 csys = 4.90 CPU)
big-tables: Total time: 7 wallclock secs ( 2.98 usr 1.63 sys + 0.00 cusr 0.00 csys = 4.61 CPU)
connect: Total time: 71 wallclock secs (17.89 usr 6.37 sys + 0.00 cusr 0.00 csys = 24.26 CPU)
create: Total time: 255 wallclock secs ( 4.47 usr 1.14 sys + 0.00 cusr 0.00 csys = 5.61 CPU)
insert: Total time: 595 wallclock secs (207.82 usr 40.28 sys + 0.00 cusr 0.00 csys = 248.10 CPU)
select: Total time: 53 wallclock secs (19.91 usr 3.35 sys + 0.00 cusr 0.00 csys = 23.26 CPU)
transactions: Test skipped because the database doesn't support transactions
wisconsin: Total time: 3 wallclock secs ( 1.19 usr 0.48 sys + 0.00 cusr 0.00 csys = 1.67 CPU)

All 9 test executed successfully

Totals per operation:
Operation seconds usr sys cpu tests
alter_table_add 14.00 0.02 0.00 0.02 100
alter_table_drop 16.00 0.01 0.00 0.01 91
book-keeping 3.00 0.00 0.00 0.00 11
connect 3.00 2.02 0.17 2.19 10000
connect+select_1_row 4.00 2.25 0.24 2.49 10000
connect+select_simple 4.00 2.00 0.25 2.25 10000
count 12.00 0.03 0.00 0.03 100
count_distinct 0.00 0.08 0.02 0.10 1000
count_distinct_2 0.00 0.07 0.01 0.08 1000
count_distinct_big 6.00 3.88 0.90 4.78 120
count_distinct_group 0.00 0.47 0.09 0.56 1000
count_distinct_group_on_key 0.00 0.10 0.02 0.12 1000
count_distinct_group_on_key_parts 1.00 0.46 0.07 0.53 1000
count_distinct_key_prefix 0.00 0.06 0.02 0.08 1000
count_group_on_key_parts 1.00 0.47 0.08 0.55 1000
count_on_key 13.00 3.45 0.45 3.90 50100
create+drop 85.00 3.69 1.00 4.69 10000
create_MANY_tables 81.00 0.60 0.06 0.66 10000
create_index 3.00 0.00 0.00 0.00 8
create_key+drop 82.00 0.02 0.03 0.05 10000
create_table 0.00 0.01 0.00 0.01 31
delete_all_many_keys 15.00 0.02 0.00 0.02 1
delete_big 0.00 0.00 0.00 0.00 1
delete_big_many_keys 15.00 0.02 0.00 0.02 128
delete_key 0.00 0.11 0.03 0.14 10000
delete_range 3.00 0.00 0.00 0.00 12
drop_index 2.00 0.00 0.00 0.00 8
drop_table 0.00 0.00 0.00 0.00 28
drop_table_when_MANY_tables 5.00 0.01 0.00 0.01 10000
insert 9.00 0.85 0.07 0.92 350768
insert_duplicates 6.00 0.61 0.22 0.83 100000
insert_key 15.00 1.26 0.02 1.28 100000
insert_many_fields 3.00 0.08 0.01 0.09 2000
insert_select_1_key 2.00 0.00 0.00 0.00 1
insert_select_2_keys 2.00 0.00 0.00 0.00 1
min_max 4.00 0.01 0.00 0.01 60
min_max_on_key 8.00 5.98 0.61 6.59 85000
multiple_value_insert 2.00 0.19 0.01 0.20 100000
once_prepared_select 15.00 3.09 0.99 4.08 100000
order_by_big 18.00 11.39 2.66 14.05 10
order_by_big_key 18.00 11.63 2.76 14.39 10
order_by_big_key2 17.00 11.42 2.61 14.03 10
order_by_big_key_desc 17.00 11.67 2.66 14.33 10
order_by_big_key_diff 18.00 11.42 2.65 14.07 10
order_by_big_key_prefix 17.00 11.42 2.60 14.02 10
order_by_key2_diff 2.00 0.98 0.21 1.19 500
order_by_key_prefix 1.00 0.52 0.12 0.64 500
order_by_range 2.00 0.57 0.12 0.69 500
outer_join 2.00 0.00 0.00 0.00 10
outer_join_found 2.00 0.00 0.00 0.00 10
outer_join_not_found 1.00 0.00 0.00 0.00 500
outer_join_on_key 1.00 0.00 0.00 0.00 10
prepared_select 22.00 8.63 1.17 9.80 100000
select_1_row 12.00 1.49 0.88 2.37 100000
select_1_row_cache 4.00 1.47 0.95 2.42 100000
select_2_rows 13.00 2.15 1.08 3.23 100000
select_big 19.00 11.45 2.67 14.12 80
select_big_str 7.00 2.35 0.54 2.89 10000
select_cache 1.00 0.59 0.12 0.71 10000
select_cache2 26.00 0.78 0.09 0.87 10000
select_column+column 13.00 1.64 0.85 2.49 100000
select_diff_key 54.00 0.09 0.02 0.11 500
select_distinct 1.00 0.81 0.16 0.97 800
select_group 1.00 0.51 0.09 0.60 2911
select_group_when_MANY_tables 2.00 0.15 0.05 0.20 10000
select_join 1.00 0.24 0.05 0.29 100
select_key 37.00 16.26 2.49 18.75 200000
select_key2 37.00 15.94 2.62 18.56 200000
select_key2_return_key 33.00 15.06 1.99 17.05 200000
select_key2_return_prim 35.00 15.49 2.19 17.68 200000
select_key_prefix 35.00 16.11 2.52 18.63 200000
select_key_prefix_join 3.00 2.19 0.52 2.71 100
select_key_return_key 35.00 15.74 2.23 17.97 200000
select_many_fields 4.00 2.90 1.62 4.52 2000
select_range 7.00 4.35 0.93 5.28 410
select_range_key2 3.00 1.68 0.24 1.92 25010
select_range_prefix 3.00 1.70 0.24 1.94 25010
select_simple 5.00 0.50 0.32 0.82 100000
select_simple_cache 6.00 2.02 1.09 3.11 100000
select_simple_join 0.00 0.27 0.06 0.33 500
update_big 13.00 0.00 0.00 0.00 10
update_of_key 4.00 0.60 0.22 0.82 50000
update_of_key_big 6.00 0.01 0.01 0.02 501
update_of_primary_key_many_keys 7.00 0.01 0.00 0.01 256
update_with_key 22.00 3.79 1.53 5.32 300000
update_with_key_prefix 10.00 2.47 1.26 3.73 100000
wisc_benchmark 2.00 1.19 0.48 1.67 114
TOTALS 1033.00 253.57 53.04 306.61 3425961


Sobald man sich einloggt, geht die Performance in den Keller.
Entweder geht ein apache Prozess auf 99% Prozessorauslastung, oder apache forked 5 Prozesse auf, die ca. 99% Prozessorlast erzeugen.
Kommt immer aufs gleiche raus.


Die Frage ist also, was ist anders, wenn ich eingeloggt bin und warum dauert das so lange.
Liegt es an mysql?
Liegt es an apche?
Oder liegt es an der Interaktion zwischen mysql und apache?
Wie kann ich das herausfinden?

Hier noch meine Konfig:

my.cnf

Code:
port            = 3306 
socket          = /var/lib/mysql/mysql.sock 
skip-locking 


key_buffer = 512M 
max_allowed_packet = 16M 

table_cache = 512 
#sort_buffer_size = 4096K 
sort_buffer_size = 8M 
join_buffer_size = 8M 
net_buffer_length = 16K 
read_buffer_size = 8M 
read_rnd_buffer_size = 16M 
bulk_insert_buffer_size = 32M 
myisam_sort_buffer_size = 64M 
thread_cache_size = 8 
thread_stack = 128K 
record_buffer = 15M 
thread_cache = 512 
query_cache_size = 32M 
query_cache_limit = 2M 
query_cache_type = 1 


max_connections = 2500 
wait_timeout = 10 
interactive_timeout = 100 


[isamchk] 
key_buffer = 256M 
sort_buffer_size = 256M 
read_buffer = 4M 
write_buffer = 4M 

[myisamchk] 
key_buffer = 256M 
sort_buffer_size = 256M 
read_buffer = 4M 
write_buffer = 4M


php.ini

Code:
max_execution_time = 60     ; Maximum execution time of each script, in seconds 
max_input_time = 60     ; Maximum amount of time each script may spend parsing request data 
memory_limit = 64M 

post_max_size = 16M


server-tuning.conf

Code:
# prefork MPM 
<IfModule prefork.c> 
        # number of server processes to start 
        StartServers        5 
        # minimum number of server processes which are kept spare 
        MinSpareServers     5 
        # maximum number of server processes which are kept spare 
        MaxSpareServers   20 
        # maximum number of server processes allowed to start 
        MaxClients        100 
        # maximum number of requests a server process serves 
        MaxRequestsPerChild  1000 
</IfModule> 

KeepAlive On 

MaxKeepAliveRequests 100 

KeepAliveTimeout 15



Kernel: 2.6.11.4-21.15-default

Apache kompiliert mit:
'./configure' '--prefix=/usr' '--datadir=/usr/share/php' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--libdir=/usr/share' '--includedir=/usr/include' '--sysconfdir=/etc' '--with-_lib=lib' '--with-config-file-path=/etc' '--with-exec-dir=/usr/lib/php/bin' '--disable-debug' '--enable-inline-optimization' '--enable-memory-limit' '--enable-magic-quotes' '--enable-safe-mode' '--enable-sigchild' '--disable-ctype' '--disable-session' '--without-mysql' '--disable-cli' '--without-pear' '--with-openssl' '--with-apxs2=/usr/sbin/apxs2-prefork' 'i586-suse-linux'


Hat jemand eine Idee?

Vielen Dank schonmal und Grüße Karsten


PS: Ich habe es mal ins HTTP Forum geschrieben, weil ich mehr auf apache als auf mysql tippe.
 
Last edited by a moderator:
Aber der Kernel kompiliert sich ja nicht über Nacht selbst,
und es lief ja anscheinend gut?!
 
Hallo traced,

Apache kompiliert mit:
...'--without-mysql' ...

Aber der Kernel kompiliert sich ja nicht über Nacht selbst,
und es lief ja anscheinend gut?!

Ich glaube, du hast da was verwechselt ;)

Es geht um die Apache-Kompilation, nicht den Kernel.

Lieben Gruß
Free
 
Ja, bisher war die Performance ok.
Von einem auf den anderen Tag (ohne das irgendetwas geändert wurde) ging er in die Knie.
 
Back
Top