WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   webbserver konfiguration (https://www.wn.se/forum/showthread.php?t=15797)

eddman 2006-08-23 21:59

Hej

Vi har en hemsida med ca 5000 unika besökare om dagen. Vi kör denna på en HP dual XEON 3.0 64-bit server med 2GB RAM och RAID0 SCSI diskar. Mjukvaran är Debian Sarge, PHP5, Apache2 (MPM prefork) och MySql. Allt funkar men jag upplever att servern är seg och skulle behöva lite tips från någon som kan konfigurera en server med ovanstående setup. Själv kan jag väldigt lite, detta är min första installation så jag har säkert gjort en massa nybörjartabbar.

Det är precis som om servern bara klarar att hantera en request åt gången, med det menar jag att den inte svarar på något annat innan den requesten är slutbehandlad. Om jag exempelvis kör igång ett script som gör lite databashantering så svarar inte servern på andra requests. Sedan är minnet upptaget hela tiden, även när servern är nystartad så är minnet upptaget till typ 90%.

Kan detta bero på att vi kör Apache mpm-prefork som ej verkar ha stöd för threading. mpm-worker verkar ha det men funkar ej PHP. Kolla mer här: http://www.debianhelp.co.uk/apachephp5.htm

Kan det göra något med att vi kör mod_revrite?

Är det någon inställning man behöver göra för att lagra/rensa cachning av sidor eller liknande?

Jag testade minnet och diskarna i servern och de funkar som de skall enligt diverse analysprogram.


tacksam för tips!

/jalle

PeterM 2006-08-24 06:30

I din httpd.conf bör det finnas ett <IfModule prefork.c></IfModule>-block. Kolla upp vad du har för inställningar där till att börja med. Prefork som sådant ska i alla fall inte vara problemet.

eddman 2006-08-24 09:43

Citat:

I din httpd.conf bör det finnas ett <IfModule prefork.c></IfModule>-block. Kolla upp vad du har för inställningar där till att börja med.
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>

vad ska det vara här?

sedan har jag kollat upp lite annat oxå, jag misstänkar att apache kanske inte utnyttjar båda processorerna så jag körde: cat /proc/cpuinfo och fick då fram följande:

processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel&reg; Xeon™ CPU 3.00GHz
stepping : 1
cpu MHz : 3000.253
cache size : 1024 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm pni monitor ds_cpl cid
bogomips : 5989.99

kan du se något som är fel i dessa inställningar och i så fall, vad skall ändras?

mvh /ed

eddman 2006-08-24 10:25

Citat:

I din httpd.conf bör det finnas ett <IfModule prefork.c></IfModule>-block. Kolla upp vad du har för inställningar där till att börja med.
menar du inte i apache2.conf ?

vår httpd.conf innehåller bara följande:

# This is here for backwards compatability reasons and to support
# installing 3rd party modules directly via apxs2, rather than
# through the /etc/apache2/mods-{available,enabled} mechanism.
#
#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so


mvh /ed

Spirre 2006-08-24 11:15

Hmm du måste kompilera in en ny kärna med SMP stöd. föresten har ni HT påslaget på cpun? så fall acpi stödet med. som de ser ut där så nyttjar den bara en cpu.

eddman 2006-08-24 11:38

Citat:

föresten har ni HT påslaget på cpun? så fall acpi stödet med. som de ser ut där så nyttjar den bara en cpu.
hur kollar jag detta?

/ed

PeterM 2006-08-24 11:43

Kompilerar man Apache2 själv så heter config-filen httpd.conf, men jag gissar att du installerat från paket med apt-get och saker heter annat då. Värdena för prefork ser i alla fall inte ut att vara någon felkälla.

Har du aktiverat mod_status? Med den aktiverad går det att se var Apache har för sig för stunden vad gäller antalet aktiva workers, request etc. Kanske kan ge nån ledtråd till varför saker är sega.

eddman 2006-08-24 12:27

Oki, har installerat mod_status och får följande output:

Server Version: Apache/2.0.54 (Debian GNU/Linux) mod_ssl/2.0.54 OpenSSL/0.9.7e
Server Built: Jul 28 2006 09:04:55

--------------------------------------------------------------------------------

Current Time: Thursday, 24-Aug-2006 12:14:07 CEST
Restart Time: Thursday, 24-Aug-2006 12:11:14 CEST
Parent Server Generation: 0
Server uptime: 2 minutes 53 seconds
11 requests currently being processed, 5 idle workers
.WKW.W__.KC_K_.W....C......W_..C.................. ..............
.................................................. ..............
.................................................. ..............
.................................................. ..............



en annan konstig sak är att det tog minst 5 minuter att göra en forcad restart av apache2, något som normalt bara borde ta några sekunder eller?

några uppslag?

tack igen

/ed

Spirre 2006-08-24 12:31

Om du har HT påslagen bör du se i BIOS sen kanske dmesg kan säga något om det med.
kör en uname -a så ser du va du har för kernel o så.. men antar du kör debian standard dvs 2.6.8-2-386.

eddman 2006-08-24 13:18

jag skall kolla upp lite saker och göra en ominstallation. återkommer med mer info. klart är i varje fall att vi Apache2 med bara en processor, jag antar att det är denna guiden som vi skall följa:

http://www.skolelinux.no/~klaus/sarge/x2003.html

tack för hjälpen så länge!

/ed

Spirre 2006-08-24 13:25

Ja, den går med att göra om du vill köra med debians 2.6.8-2-smp kernel
annars om ni har någon kunnig rekommenderar jag att köra in den nyaste 2.6kerneln från www.kernel.org

eddman 2006-08-25 09:13

eftersom vi inte har någon större koll på detta så installerade vi enligt den guiden. jag får upp två CPU och den visar fulla minnet på 2GB när jag kör cat /proc/cpuinfo

det skumma är då att minnet är helt upptaget, det står så här:

top - 08:59:58 up 10:01, 1 user, load average: 0.40, 0.26, 0.26
Tasks: 54 total, 1 running, 53 sleeping, 0 stopped, 0 zombie
Cpu0 : 1.0% us, 0.3% sy, 0.0% ni, 98.3% id, 0.3% wa, 0.0% hi, 0.0% si
Cpu1 : 21.9% us, 10.4% sy, 0.0% ni, 63.6% id, 4.0% wa, 0.0% hi, 0.0% si
Mem: 2076380k total, 2044536k used, 31844k free, 240456k buffers
Swap: 2714944k total, 0k used, 2714944k free, 601860k cached

är det verkligen normalt att minnet skall vara helt upptaget?

/ed

Spirre 2006-08-25 10:56

hrmm om ni fortsätter i top ser ni vilket som har mest memuse..
den brukar iofs ta mycket minne o sen buffra det. men detta såg inte friskt ut..
jag tror på en felaktig my.cnf(sql) eller apache som spökar.

min top..

CPU states: 1.8% user, 0.0% nice, 2.0% system, 0.2% interrupt, 96.1% idle
Mem: 407M Active, 1186M Inact, 265M Wired, 92M Cache, 112M Buf, 52M Free
Swap: 2048M Total, 13M Used, 2035M Free

eddman 2006-08-25 11:31

här är listan över processer:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24406 www-data 16 0 21468 9688 17m S 0.7 0.5 0:00.52 apache2
24224 www-data 17 0 21480 9756 17m S 0.3 0.5 0:01.07 apache2
1 root 16 0 1504 512 1352 S 0.0 0.0 0:00.57 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0.0 0.0 0:00.01 migration/1
5 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
6 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/0
7 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/1
8 root 12 -10 0 0 0 S 0.0 0.0 0:00.00 khelper
9 root 7 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid
39 root 5 -10 0 0 0 S 0.0 0.0 0:00.03 kblockd/0
40 root 5 -10 0 0 0 S 0.0 0.0 0:00.02 kblockd/1
50 root 15 0 0 0 0 S 0.0 0.0 0:00.29 pdflush
51 root 16 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
52 root 16 0 0 0 0 S 0.0 0.0 0:00.33 kswapd0

vad jag kan se så är det ingenting som tar upp något minne knappt.

detta är infon i vår my.cnf som inte är bortkommaterat:

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /var/tmp
language = /usr/share/mysql/english
skip-external-locking
old_passwords = 1
bind-address = 127.0.0.1
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
query_cache_limit = 1048576
query_cache_size = 16777216
query_cache_type = 1
log-bin = /var/log/mysql/mysql-bin.log
expire-logs-days = 20
max_binlog_size = 104857600
#binlog-do-db = include_database_name
#binlog-ignore-db = include_database_name
skip-bdb

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer = 16M


något som är galet?

/ed

kullervo 2006-08-25 12:45

Kul tråd. WN i ett nötskal. Killen har grymt mycket överkapacitet i form av CPU-kraft så jag förstår inte varför det ens är värt att lägga ner tid på att bygga en SMP-kernel.

eddman:
Kolla upp vad inställningarna i blocket <IfModule prefork.c> betyder samt keepalive så har du svaret varför inte fler kan kan surfa samtidigt.

eddman 2006-08-25 12:55

hej kullervo,

ja, jag vet att jag inte är någon hacker på linuxservrar:)

kan du inte ge mig en hint på vad jag skall ändra i configen för att det ska funka fint? så här ser den ut idag:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>


/ed

nicclas 2006-08-25 13:06

Citat:

Originally posted by eddman@Aug 25 2006, 12:55
hej kullervo,

ja, jag vet att jag inte är någon hacker på linuxservrar:)

kan du inte ge mig en hint på vad jag skall ändra i configen för att det ska funka fint? så här ser den ut idag:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>


/ed

Prova med default-värdena igen, kanske? De är:

<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>

kullervo 2006-08-25 13:14

Eftersom du har massor med minne så antar jag att det är ok om en hel del går åt till apache. Någonting liknande borde funka hyffsat:

<IfModule prefork.c>
StartServers 200
MinSpareServers 10
MaxSpareServers 30
MaxClients 200
MaxRequestsPerChild 0
</IfModule>

Sen sätter du KeepAliveTimeout till 10 (vilket är högt men eftersom du har mycket minne har du råd med att apache har många processer igång och drar därmed en hel del minne).

MaxClients bestämmer hur många apache2-processer som får vara igång samtidigt. Du kan se antalet som är igång just nu genom att köra:
ps -e | grep apache2 | wc -l
Om den drar igång närmare 200 processer under högtrafik bör du öka MaxClients eller sänka KeepAliveTimeout.

Om du kör med persistent connections för mysql bör du se upp för då kommer den hålla en anslutning mot mysql per apache-process. Du måste alltså dels tillåta lika många mysql-anslutningar som apache-processer och dels måste du se till att det inte kommer dra för mycket minne så att burken börjar swappa eller att något annat blir lidande.

Du bör läsa i manualen om hur det fungerar så du har koll på grejerna.

Spirre 2006-08-25 13:21

kullervo: klart det är bättre o köra in SMP kerneln. om du syftade på mitt inlägg om att han skulle ha smp. om man har dual cpu varför ska han då bara nyttja ena?

låter jävligt dumt köpa en dual om du inte ska nyttja den..

eddman 2006-08-25 14:20

jag tror dock inte att det är någon med ifmodule som strular, det lär vara något större/allvarligare. Jag antar detta eftersom det dels tar 10 min att boota om servern och nästan lika lång tid att köra en forcad reboot av Apache.

finns det någon bra logg fil där man kan kolla om det är något fel? det får nog bli en ominstallation av apache, mysql och php. får man bort allt med apt-get remove? försvinner alla configurations inställningar av dessa program oxå eller måste man ta bort något manuellt?

tack för er hjälp!

/ed

eddman 2006-08-25 14:39

ja, vi använder mysql_pconnect.

När jag kollar på servern med top kommandot så ser jag ju inte alla processer, mitt fönster räcker inte till och jag vet inte hur jag skall se resten under. Men det är helt klart mer apache2 processer än det är mysql. Jag ser bara två mysql processer:


4253 root 23 0 2512 1240 2380 S 0.0 0.1 0:00.00 mysqld_safe
4290 mysql 15 0 144m 40m 8628 S 0.0 2.0 0:02.87 mysqld

Kan detta vara orsaken till att två saker inte kan utföras samtidigt på servern? Att om en apache2 process använder mysql så måste andra apache2 processer vänta till den första är klar osv?

/ed


Alla tider är GMT +2. Klockan är nu 04:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson