Hoher CPU verbrauch bei apache

Apache, Lighttpd, nginx, Cherokee
pangaea
Posts: 16
Joined: 2006-09-06 19:30

Hoher CPU verbrauch bei apache

Post by pangaea » 2007-02-18 21:41

Hallo,

ich habe einen Shop am Laufen auf nem neuen 1u1 3XL server, dual core, 4 gig ram.Debian. Zend Optimizer


allerdings ist der CPU verbrauch immens. Hatten vorher SUSE mit 2 gig und single core proz, da wars kleiner.

top - 21:31:58 up 37 days, 23:03, 3 users, load average: 17.52, 19.52, 16.11
Tasks: 101 total, 15 running, 77 sleeping, 9 stopped, 0 zombie
Cpu(s): 93.1% us, 6.7% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.2% si
Mem: 4050504k total, 2147536k used, 1902968k free, 12028k buffers
Swap: 1953784k total, 4424k used, 1949360k free, 1356852k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10375 www-data 16 0 103m 41m 4212 R 33.6 1.1 0:09.50 apache2
10384 www-data 16 0 71708 9856 4156 S 20.7 0.2 0:02.84 apache2
10419 www-data 17 0 100m 38m 4136 R 18.1 1.0 0:02.82 apache2
10417 www-data 16 0 94268 31m 4144 R 16.5 0.8 0:01.23 apache2
10321 www-data 16 0 96316 33m 4776 R 15.8 0.8 0:13.99 apache2
10388 www-data 15 0 102m 41m 4192 S 12.8 1.1 0:03.88 apache2
10403 www-data 15 0 71628 9776 4156 S 10.9 0.2 0:03.03 apache2
30685 mysql 15 0 828m 254m 6320 S 9.2 6.4 75:43.28 mysqld
10390 www-data 16 0 92536 29m 4144 R 8.9 0.7 0:03.74 apache2
10404 www-data 16 0 96440 33m 4356 R 8.9 0.8 0:04.53 apache2
10389 www-data 16 0 98572 35m 4204 R 8.6 0.9 0:03.88 apache2
10437 www-data 15 0 102m 41m 4164 S 8.6 1.0 0:01.38 apache2
10356 www-data 16 0 102m 41m 4840 R 7.2 1.1 0:10.29 apache2
10382 www-data 16 0 85884 23m 4148 R 5.9 0.6 0:04.34 apache2
10395 www-data 16 0 81864 19m 4184 R 3.6 0.5 0:05.30 apache2
10407 www-data 17 0 99.4m 38m 4148 R 3.6 1.0 0:02.71 apache2
10385 www-data 15 0 71628 9776 4156 S 1.3 0.2 0:03.72 apache2
10409 www-data 15 0 71608 9744 4148 S 0.7 0.2 0:03.41 apache2
10427 www-data 16 0 74196 11m 4144 R 0.7 0.3 0:01.52 apache2

config
Timeout 30

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.

KeepAlive Off


KeepAlive Off

# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.

MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.

KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
##

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

php wird wohl als modul geladen

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so


So 3000 visits am Tag.

irgendwelche Tipps, wo ich anfangen kann zu suchen?

Gruß
Harald

der kleine tux
Posts: 97
Joined: 2005-10-29 04:12
Location: Planet Erde

Re: Hoher CPU verbrauch bei apache

Post by der kleine tux » 2007-02-18 23:12

Nabend

ich denke mal es liegt an deiner MaxRequestsPerChild einstellung
400 sind viel zu wenig und das ständige neu Forken beansprucht natürlich die CPU
MaxRequestsPerChild 5000

oder 10000 sollten deine CPU ein wenig entlasten
MaxSpareServers könnten auch ruhig +5

Gruß

noto
Posts: 6
Joined: 2007-02-19 04:38

Re: Hoher CPU verbrauch bei apache

Post by noto » 2007-02-19 05:10

verwende mal diese Werte in der /etc/httpd/conf/httpd.conf

Code: Select all

Timeout 30
KeepAlive On
MaxKeeAliveRequests 1000
KeepAliveTimeout 4


<IfModule prefork.c>
StartServers       2
MinSpareServers    5
MaxSpareServers    10
ServerLimit       150
MaxClients        25
MaxRequestsPerChild  8000
</IfModule> 



HostnameLookups off
Maximal werden 25 Client Verbindungen gleichzeitig hergestellt. Pro offener Verbindung werden max 1000 Requests verarbeitet z.b. laden von .jpg .gif Flash o.ä.
Jede offene Verbindung wird nach 4 Sekunden beendet.

12 Stunden x 60 x 60 = 43200 Sekunden : 3000 Visits = 1 Visit/14 Sekunden
Eigentlich sollte der Server das locker wegstecken.

Dann würde ich noch die /etc/my.cnf optimieren mit Tuning-Primer.sh Script

http://www.day32.com/MySQL/

Code: Select all

#per SSH mit root einloggen, dann mit

cd /usr
cd bin

#in das /usr/bin Verzeichnis wechseln. Nun kopieren wir tuning-primer.sh in das /bin Verzeichnis

wget http://www.day32.com/MySQL/tuning-primer.sh

#und setzen die Zugriffsrechte mit

chmod 755 tuning-primer.sh

#nun rufen wir das Script auf mit

tuning-primer.sh

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Hoher CPU verbrauch bei apache

Post by oxygen » 2007-02-19 16:18

Ein nettes Script. Allerdings geht die Ausführung auch etwas unkomplizierter:

Code: Select all

wget -q http://www.day32.com/MySQL/tuning-primer.sh -O- | sh

pangaea
Posts: 16
Joined: 2006-09-06 19:30

Re: Hoher CPU verbrauch bei apache

Post by pangaea » 2007-02-19 21:56

danke

besser aber nicht gut

top - 21:53:47 up 38 days, 23:25, 3 users, load average: 20.44, 11.79, 9.17
Tasks: 105 total, 3 running, 98 sleeping, 4 stopped, 0 zombie
Cpu(s): 80.4% us, 15.3% sy, 0.0% ni, 4.3% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 4050504k total, 2821224k used, 1229280k free, 16684k buffers
Swap: 1953784k total, 4420k used, 1949364k free, 1880928k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3347 mysql 16 0 499m 180m 6012 S 99.9 4.6 10:35.25 mysqld
4486 www-data 17 0 117m 56m 4228 R 45.3 1.4 0:19.51 apache2
4404 www-data 15 0 83104 21m 5048 S 23.5 0.5 0:41.90 apache2
4440 www-data 17 0 90424 27m 4260 S 2.9 0.7 0:21.94 apache2
4482 www-data 15 0 95680 32m 4836 S 0.7 0.8 0:08.56 apache2
3556 root 16 0 9464 1288 936 R 0.3 0.0 0:03.53 top
4443 www-data 15 0 86924 24m 4956 S 0.3 0.6 0:20.05 apache2
4479 www-data 15 0 86492 23m 4176 S 0.3 0.6 0:04.33 apache2
4483 www-data 15 0 86172 23m 4208 S 0.3 0.6 0:09.48 apache2
4490 www-data 16 0 86192 23m 4208 S 0.3 0.6 0:05.74 apache2


vorher war das teil auf nem normalen xl server mit anderen sites, und nur auf nem eigenen mit doppelt so viel ram und doppel CPU.

kanns mir nicht erlären. Normal müsste der Traffic dem server doch grad mal ein müdes Lächeln entlocken.

Gruß
Harry

noto
Posts: 6
Joined: 2007-02-19 04:38

Re: Hoher CPU verbrauch bei apache

Post by noto » 2007-02-20 01:25

du solltest die Variables für MySQL in der /etc/my.cnf optimieren. z.B.

Code: Select all

[mysqld]

key_buffer = 100M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 8M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 4M
thread_cache = 8
query_cache_size = 4M
max_connections = 25
long_query_time = 2
und mit Tuning-Primer.sh Script überwachen. Bei 4 GB RAM würde ich bis zu 2,8 GB den Buffers zur Verfügung stellen.

(key_buffer + sort_buffer + read_buffer) x max_connections = RAM