PDA

Bekijk Volledige Versie : httpd vraag



Don_Loco
14/07/07, 23:12
Ik zit met een klein probleem soms wordt mijn website zwaar bezocht en belast , er zit een database aanvast en nou vroeg ik me af hoe ik het beste mijn httpd config bestand moet instellen ik hoop dat iemand me kunt helpen hiermee zodat me site sneller en beter zal gaan draaien


Intel(R) Pentium(R) D CPU 2.80GHz
Total Memory 2075552 kB
OS Debian 3.1
Apache2
MySQL version: 5.0.45


Httpd config bestand hieronder



ServerRoot "/etc/httpd"

PidFile /var/run/httpd.pid

Timeout 60
KeepAlive Off
MaxKeepAliveRequests Off
KeepAliveTimeout 2


##
## 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 8
MinSpareServers 5
MaxSpareServers 10
MaxClients 2500
MaxRequestsPerChild 100
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 8
MaxClients 2500
MinSpareThreads 5
MaxSpareThreads 10
ThreadsPerChild 1000
MaxRequestsPerChild 100
</IfModule>

# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 100
</IfModule>

bvankuik
15/07/07, 08:28
Iedereen kan nu naar je httpd.conf gaan kijken, maar hoe weet je dat Apache de bottleneck is?

GlennMatthys
15/07/07, 10:36
Welke MPM gebruikt u?

Ospito
15/07/07, 11:42
Beste Don_Loco,

Ik zou het hier eens mee proberen:


ServerRoot "/etc/httpd"

PidFile /var/run/httpd.pid

Timeout 40
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 2
ServerLimit 600


##
## 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 25
MinSpareServers 25
MaxSpareServers 75
MaxClients 600
MaxRequestsPerChild 10000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 25
MaxClients 600
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 10000
</IfModule>

# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 10000
</IfModule>


Uiteraard zet je voor een betere performance: HostnameLookups Off

Bovenstaande configuratie is misschien nog niet de beste voor jou situatie, maar ik denk dat het je op weg kan helpen.

Let met je configuratie op dat je niet al je geheugen laat verbruiken! Zodra dat gebeurt zal je besturingssysteem de SWAP gaan gebruiken. Dat is echt het laatste wat je wilt, zoals je begrijpt keldert hiermee je performance. Omdat het laden van je website langer duurt drukken mensen op stoppen en vernieuwen wat je in een oneindige spiraal brengt. Test je configuratie dus goed! De MaxCliënts dus niet te hoog, want dat vreet geheugen.

Verder is het van belang om te weten hoe groot je MySQL tabellen zijn, bij grote tabellen en queries kan hier ook een gedeelte van de bottleneck zitten. Vaak is uitbreiding van het interne geheugen dé oplossing, maar let op, dat geldt natuurlijk niet altijd. Je zou ook nog eens kunnen kijken naar je mysql configuratie, om die iets te tunen. Heb je bijv. slow queries? (mysqladmin status geeft daar inzicht in).

Met de volgende parameters in je my.cnf kun je misschien ook nog wat overhead beperken:


interactive_timeout=60
wait_timeout=60
connect_timeout=10
thread_concurrency=2
thread_cache_size=128
table_cache=2048

Ook voor dit geldt natuurlijk dat de beste configuratie afhangt van de hardware en applicatie, je zal hier een beetje mee moeten testen en proberen tot je de beste configuratie te pakken hebt.

Ik hoop dat je hier een beetje mee op weg geholpen bent, maar ook op internet kun je veel informatie vinden over het tunen van apache of optimaliseren van mysql. Zoek bijv. maar eens op apache tuning in google, genoeg te lezen.

Succes.

crazycoder
15/07/07, 11:51
Verder is het van belang om te weten hoe groot je MySQL tabellen zijn, bij grote tabellen en queries kan hier ook een gedeelte van de bottleneck zitten. Vaak is uitbreiding van het interne geheugen dé oplossing, maar let op, dat geldt natuurlijk niet altijd. Je zou ook nog eens kunnen kijken naar je mysql configuratie, om die iets te tunen. Heb je bijv. slow queries? (mysqladmin status geeft daar inzicht in).

Voordat aan tunen wordt begonnen eerst de queries bekijken en, minstens zo belangrijk, indexen op tabellen..

Een tabel hoeft niet groot te zijn, met iets van 2000 records kan een index of wat het verschil zijn tussen traag en snel.

almar
15/07/07, 12:16
Mmm, ik denk dat je weinig kunt zeggen. Hoeveel geheugen zit er in die machine, hoe ziet de my.cnf eruit?

Don_Loco
15/07/07, 13:15
der zit 2 gig geheugen in de server , momenteel zijn er 50 man online serverload 0.01 , maar dat is op het moment dat ik er naar kijk dus zou wel kunnen dat het straks weer omhoo vliegt , bedankt voor je info allemaal , ik ga even op google kijken hoe het precieswerkt met tune

almar
15/07/07, 15:24
95 % kans dat de bottleneck in je MySQL configuratie zit.

Don_Loco
15/07/07, 23:45
ok , ik heb namelijk net gekeken maar er is geen my.cnf file lege file op me server dus , dus die moet nog gebouwd worden

Ospito
15/07/07, 23:55
ok , ik heb namelijk net gekeken maar er is geen my.cnf file lege file op me server dus , dus die moet nog gebouwd worden
Voor je MySQL gaat optimaliseren denk ik dat je zelf erg goed moet weten wat voor queries er worden gebruikt. Heb je grote indexen, joins? Verder is het belangrijk om te weten of je nu slow queries hebt. Zo ja, dan zou ik eerst achterhalen om welke queries het gaat, je kunt zo veel gerichter optimaliseren, aangezien je weet waar de bottleneck zit.
Kijk eens naar deze link: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html

Vaak is niet alleen mysql of apache de bottleneck, maar is het één het gevolg van het ander.

Misschien kun je met ons delen of je veel slow queries hebt, aan de hand daarvan is beter te bepalen waar je het probleem moet zoeken. Verder zou het helpen om de output van een apachectl status te posten. Hoe groot is een gemiddeld httpd proces en hoeveel worden er op een druk tijdstip tegelijkertijd uitgevoerd. Dat is belangrijke informatie als basis voor optimalisatie.

Succes.

Don_Loco
16/07/07, 00:01
Slow qeuries staat op 0


Hieronder het gene wat ik kan zien in mijn database wat in het rood staat
Handler_read_rnd 8,937 k
Handler_read_rnd_next 1,208 M
Created_tmp_disk_tables 2,784
Sort_merge_passes 4
Opened_tables 637
Table_locks_waited 16 k

Ik had de server herstart omdat ik wilde kijken hoeveel qeuries hij verstuurd per dag , hieronder de uitkomst
This MySQL server has been running for 1 days, 9 hours, 11 minutes
Query statistics: Since its startup, 3,111,588 queries have been sent to the server

Ospito
16/07/07, 09:11
Okee, dat is nuttige informatie, nu zouden we hetzelfde nog moeten hebben van Apache. Als ik dit zo zie, dan denk ik dat wat extra geheugen geen overbodige luxe zal zijn, maar we wachten het resultaat van de apache statistieken even af.

Zet in de httpd.conf
ExtendedStatus On

en zoek in je httpd.conf op server-status en pas dat aan, zodat het lijkt op het volgende:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>

Als je nu apache een herstart geeft en het commando apachectl status intikt dan zou je nuttige informatie over apache moeten zien.

Tijdens de drukke tijden zou je ook direct eens kunnen kijken met top of je SWAP gebruikt wordt

Om overhead te voorkomen zou ik je aanraden de volgende parameters in de httpd.conf te plaatsen:
HostnameLookups Off

Je zou er ook nog eens kunnen kijken naar je LogLevel, misschien die iets aanpassen, zodat er minder logvermeldingen worden weggeschreven.
Dit zijn maar kleine dingen die geen groot verschil zullen maken, maar alle beetjes helpen.

Als laatste, hoe zit het met de harde schijf. Zit er één in, zijn het er 2, in RAID 0 of 1, SATA of SAS? Je kunt je voorstellen dat bij veel schijfbewerkingen een snelle harde schijf een must is, daarom is het misschien ook handig om even te kijken hoeveel data er naar de hdd wordt geschreven. Je zou eens kunnen kijken naar het commando iostat (op FreeBSD), misschien is er een alternatief voor linux, of kun je hem installeren.

nilicule
16/07/07, 12:07
ik hoop dat iemand me kunt helpen hiermee zodat me site sneller en beter zal gaan draaien

Zonder een gedetaileerde beschrijving van je configuratie, MySQL database en bezoekers is elke suggestie een compleet schot in het donker.

Als je een forum draait dan hebben we het over een totaal ander soort load op je server dan als je een site draait waar veel statische content wordt bezocht (plaatjes bijvoorbeeld).

Laten we er van uit gaan dat je veel dynamische content hebt.

In dat geval is het een idee om MySQL Report (http://hackmysql.com/mysqlreport) eens te gebruiken. Dit programma kan je in ieder geval vertellen of de bottleneck inderdaad in je database zit (wat zonder een my.cnf zeker niet ondenkbaar is).

Na het optimaliseren van MySQL en het toevoegen van een my.cnf kan je dan altijd nog eens kijken of je bijvoorbeeld je Apache kan optimaliseren, meer geheugen noodzakelijk is, enz. enz.

Don_Loco
16/07/07, 17:38
Het is nu erg druk op me site met het command top komt er het volgende uit , zo ver ik kan zien wordt de swap niet gebruikt


top - 17:31:16 up 2 days, 3:22, 1 user, load average: 0.69, 0.94, 0.77
Tasks: 140 total, 2 running, 138 sleeping, 0 stopped, 0 zombie
Cpu(s): 58.1%us, 1.7%sy, 0.0%ni, 40.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2075552k total, 665416k used, 1410136k free, 63268k buffers
Swap: 2650684k total, 0k used, 2650684k free, 242072k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29673 apache 25 0 24628 10m 3920 R 96 0.5 0:33.43 httpd
2485 mysql 15 0 324m 44m 4860 S 16 2.2 304:43.14 mysqld
29670 apache 15 0 24652 10m 3924 S 4 0.5 0:55.49 httpd
31102 apache 16 0 24644 10m 4060 S 1 0.5 0:21.33 httpd
20771 apache 15 0 24624 10m 4328 S 0 0.5 2:00.80 httpd
20778 apache 15 0 24656 10m 4056 S 0 0.5 0:35.33 httpd
20782 apache 15 0 24608 10m 3928 S 0 0.5 1:01.57 httpd
20784 apache 15 0 24592 10m 4056 S 0 0.5 0:32.03 httpd
20785 apache 15 0 24664 10m 3936 S 0 0.5 0:32.55 httpd
20794 apache 15 0 24620 10m 3920 S 0 0.5 1:31.31 httpd
20803 apache 15 0 24660 10m 4080 S 0 0.5 0:29.52 httpd
20807 apache 15 0 25824 11m 4068 S 0 0.6 1:02.69 httpd
20855 apache 16 0 24748 10m 3936 S 0 0.5 0:33.33 httpd
20856 apache 15 0 24656 10m 4080 S 0 0.5 1:06.93 httpd
24984 apache 15 0 24720 10m 3924 S 0 0.5 0:58.63 httpd
24985 apache 16 0 24660 10m 3928 S 0 0.5 1:00.39 httpd
1781 apache 15 0 24604 10m 3916 S 0 0.5 0:12.46 httpd

wonko
17/07/07, 09:15
Kan je even in mysql het volgende commando geven:

show status like '%slow_quer%';

Wacht dan een minuutje of 5, en doe dit nogmaals. Kijk even als de waarde verhoogd is (ééntje extra is geen probleem)...

Als dat het geval is, zet dan even in mysql je "slow query log" aan, en herstart mysql even. Laat dit een uurtje of 2 lopen, schakel het dan terug uit, en ga dan even de logfile doorzoeken, en bekijk de queries...

Don_Loco
17/07/07, 19:43
1ste x 19:33
Variable_name Value
Slow_queries 0

2de x 19:39
Variable_name Value
Slow_queries 0

Don_Loco
19/07/07, 22:26
my.cnf file is aanwezig


key_buffer = 128M
table_cache = 32M
sort_buffer_size = 2M
read_buffer_size = 2M
join_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cash = 8
query_cache_size = 8M
max_connections = 150
thread_concurrency = 4
wait_timeout = 60
long_qeury_time = 4
open_files_limit = 8192
max_allowed_packet = 1M
interactive-timeout

Ospito
22/07/07, 23:19
Ik neem aan dat ik hieruit mag concluderen dat de problemen nog steeds bestaan?
Kun je toch eens de output van een apachectl status eens posten. Het betrouwbaarste resultaat heb je pas met een paar dagen, maar de output van de drukken momenten volstaat voorlopig ook wel. Zorg dat ExtendedStatus op ON staat in je httpd.conf. Mijn vermoeden blijft toch voorlopig bij apache als de bottleneck. Heb je ook iets van webalizer of awstats draaien, of iets anders waarmee je het aantal hits of pageviews kunt tellen? Misschien heb je ook nog wel iets als cacti draaien waarmee je grafieken van geheugen en cpu gebruik kunt genereren als je snmp even op die machine installeert. Het probleem moet toch een keer boven komen :)