Apache optimieren, Downloadserver (tcpsndbuf)
Posted: 2008-11-27 10:41
Hi,
ich verwenden einen Virtual Server als Downloadserver (Virtuozzo), was eigentlich bisher ganz problemlos funktioniert hat. Problem ist jetzt, dass eine 200 MB Datei dazugekommen ist und jetzt dort einige Nachfrage herrscht.
tcpsndbuf übersteigt leider ständig das Limit und ich wollte fragen, ob euch noch etwas einfällt, was man optimieren könnte? Allein heute hat der Server bereits 100 GB Traffic.
Es läuft Ubuntu 6.06 mit Apache 2.0.55. Per PHP werden (momentan) 30 Downloadslots vergeben, indem für jeden neuen Download ein "persönlicher Link" für jeden User erstellt wird, d.h. ein symbolic Link auf die eigentliche Datei. (zB oi7hf087h4/meindownload.zip)
Es wird regelmäßig /server-status durchlaufen, und die symbolic links entfernt, die nicht mehr in Verwendung sind und der Slot freigegeben.
Per mod_limitipconn habe ich die Verbindungen per IP bereits auf 2 beschränkt, aber das dürfte nur bedingt etwas helfen, da heute morgen tcpsndbuf schon wieder ans Limit gestoßen ist.
Auszug aus apache2.conf
Fällt euch irgendwas ein? Da es ein laufendes System ist, möchte ich nicht allzu grobe Umstellungen machen. Umstieg auf einen Dedicated Server ist momentan leider auch nicht möglich.
ich verwenden einen Virtual Server als Downloadserver (Virtuozzo), was eigentlich bisher ganz problemlos funktioniert hat. Problem ist jetzt, dass eine 200 MB Datei dazugekommen ist und jetzt dort einige Nachfrage herrscht.
tcpsndbuf übersteigt leider ständig das Limit und ich wollte fragen, ob euch noch etwas einfällt, was man optimieren könnte? Allein heute hat der Server bereits 100 GB Traffic.
Es läuft Ubuntu 6.06 mit Apache 2.0.55. Per PHP werden (momentan) 30 Downloadslots vergeben, indem für jeden neuen Download ein "persönlicher Link" für jeden User erstellt wird, d.h. ein symbolic Link auf die eigentliche Datei. (zB oi7hf087h4/meindownload.zip)
Es wird regelmäßig /server-status durchlaufen, und die symbolic links entfernt, die nicht mehr in Verwendung sind und der Slot freigegeben.
Per mod_limitipconn habe ich die Verbindungen per IP bereits auf 2 beschränkt, aber das dürfte nur bedingt etwas helfen, da heute morgen tcpsndbuf schon wieder ans Limit gestoßen ist.
Code: Select all
cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
15529: kmemsize 20278219 20296808 39016806 42875611 518142
lockedpages 0 0 2059 2059 0
privvmpages 161746 161792 524288 537600 0
shmpages 5818 5818 50000 50000 0
dummy 0 0 0 0 0
numproc 204 204 1028 1028 0
physpages 50954 50955 0 2147483647 0
vmguarpages 0 0 262144 2147483647 0
oomguarpages 50964 50965 262144 2147483647 0
numtcpsock 104 107 1028 1028 0
numflock 9 9 1000 1100 0
numpty 1 1 150 150 0
numsiginfo 0 0 1024 1024 0
tcpsndbuf 6060980 6475152 6584420 9402468 573501221
tcprcvbuf 822248 826720 6584420 9402468 0
othersockbuf 129556 129556 4923119 9133807 0
dgramrcvbuf 0 0 4923119 4923119 0
numothersock 153 153 1028 1028 0
dcachesize 331086 336976 9198104 9474048 0
numfile 5153 5162 16448 16448 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 56 56 2147483647 2147483647 0Code: Select all
# Timeout: The number of seconds before receives and sends time out.
Timeout 300
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
KeepAlive On
# 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 80
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
KeepAliveTimeout 5
##
## 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 10
MinSpareServers 10
MaxSpareServers 40
MaxClients 128
MaxRequestsPerChild 0
</IfModule>