Apache optimieren, Downloadserver (tcpsndbuf)

Apache, Lighttpd, nginx, Cherokee
shocker
Posts: 7
Joined: 2006-09-28 10:46

Apache optimieren, Downloadserver (tcpsndbuf)

Post by shocker » 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.

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          0


Auszug aus apache2.conf

Code: 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>


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.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by Roger Wilco » 2008-11-27 21:11

Dein Szenario ist geradezu prädestiniert für lighttpd + mod_secdownload. Und zu dem konkreten Problem mit tcpsndbuf musst du eben in den sauren Apfel beißen und die Anzahl der Downloads begrenzen oder auf richtiges Blech wechseln.

shocker
Posts: 7
Joined: 2006-09-28 10:46

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by shocker » 2008-11-28 12:46

Danke, ich hab mir gerade lighttpd anschaut...das Ding ist ja geil :D

Nur: Gibt es eine Möglichkeit die Downloads zu beschränken? Bisher hatte ich ja ein Slotsystem, bei dem /server-status durchgekämmt wird, aber das kommt mit lighttpd ja leider nicht mehr in Frage. Lässt sich von mod_secdownload irgendwie auslesen, wieviele Downloads noch aktiv sind?

freddy36
Posts: 273
Joined: 2008-03-20 17:31

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by freddy36 » 2008-11-28 14:22

Mit mod_evasive die Verbindungen pro IP limitieren.
Mit mod_status kommst du an die Anzahl der Verbindungen und den aktuellen Traffic.

shocker
Posts: 7
Joined: 2006-09-28 10:46

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by shocker » 2008-11-28 14:49

War das jetzt auf Lighttpd bezogen, oder Apache?

Nunja, ich habe lighttpd mal testweise auf einem anderen Server aufgesetzt und das Slotsystem auf die Statusseite von lighttpd angepasst...schaut soweit eigentlich sehr vielversprechend aus. Bin noch am Daten kopieren...mal schauen ob sich das Ganze besser macht als mit Apache. ;)

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by rudelgurke » 2008-11-28 15:12

mod_evasive ist auf Apache bezogen - läuft auch ganz gut obwohl Lighty vielleicht die bessere Wahl in dem Fall ist. :)

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by Joe User » 2008-11-28 17:33

Lighty bringt ebenfalls mod_evasive mit ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

freddy36
Posts: 273
Joined: 2008-03-20 17:31

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by freddy36 » 2008-11-28 18:04

Shocker wrote:War das jetzt auf Lighttpd bezogen, oder Apache?

Ich hab mich auf Lighttpd bezogen :)

shocker
Posts: 7
Joined: 2006-09-28 10:46

Re: Apache optimieren, Downloadserver (tcpsndbuf)

Post by shocker » 2008-11-28 22:46

Ok, soweit schaut das Ganze eigentlich recht gut aus. Bezogen auf mein eigentliches Problem mit tcpsndbuf hat sich nicht allzuviel verändert, denn auch da scheint lighttpd nicht viel Unterschied zu machen. Seit 7h gelaufen und schon brav 100 GB ausgeliefert, aber die Werte von tcpsndbuf sind nur bisschen besser als beim Apache.
Wird wohl daraus hinauslaufen doch einen "richtigen" Server zu nehmen (VPS ist doch nicht so das Wahre), ist nur leider eine finanzielle Frage.

Was aber im direkten Vergleich sehr positiv auffällt, ist die Performance von lighttpd. Im Vergleich mit Apache profitiert am meisten der Arbeitsspeicher, aber auch insgesamt sind die Werte besser. Ok, es ist nicht so viel Schnickschnack wie beim Apache dabei, und er läuft atm auch ohne PHP, aber trotzdem bin ich sehr zufrieden damit. Konfiguration war auch ziemlich problemlos, aber ich weiß noch nicht, wie es da aussieht wenn ich mal spezielle Dinge brauche.

Glaube ich werde mich für spätere Projekte nochmal genauer damit beschäftigen. :)