Frage 1 GB VPS - Apache Worker MPM - FCGID - Max gleichzeitige Verbindungen - RAM CAP


Ich habe eine oder zwei Wochen damit verbracht, meinen Server zu recherchieren und einzurichten, um Apache mit dem Worker MPM und FCID auszuführen. Ich versuche, es zu optimieren, um die meisten gleichzeitigen Verbindungen zu ermöglichen. Es war ein Albtraum, gute Informationen über das Worker MPM zu finden.

Server - VPS mit 1 GB RAM (bei Apache nur mit ca. 150 MB RAM) Ich möchte Apache eine Speicherauslastung CAP von ca. 750 MB haben - so dass mein Server nie aus dem RAM gehen wird.

Ich habe den Server seit ungefähr 2 Jahren ohne irgendwelche Probleme laufen lassen - aber wir haben kürzlich begonnen, MP3`s zu streamen und dies erfordert mehr gleichzeitige Verbindungen. Der Server hatte auch ein paar kleinere DDOS-Attacken - also reduzierte ich die Einstellungen um eine Tonne, um zu verhindern, dass auf dem Server nicht genügend Arbeitsspeicher zur Verfügung stand - außerdem habe ich einige Firewall-Regeln hinzugefügt, um das Limit zu begrenzen.

Das Setup, das ich jetzt habe, sieht aus, als ob es gut funktioniert - aber ich bekomme einige Segmentierungsfehlerfehler

[Sat Mar 23 03:19:50 2013] [notice] child pid 28351 exit signal Segmentation fault (11)
[Sat Mar 23 03:56:20 2013] [notice] child pid 29740 exit signal Segmentation fault (11)
*** glibc detected *** /usr/sbin/httpd.worker: malloc(): memory corruption: 0xb83abdd8 ***

Und einige Fehler im Arbeitsspeicher

Out of memory during array extend.

Dies ist mein derzeitiges Setup, ich würde einen Ratschlag sehr schätzen.

Apache-Einstellungen:

Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
#####################
# Spawn 2 child processes, spawning 25 threads for each child process.
# So, a pool of 50 threads is left up and sleeping, ready to serve incoming requests.
# If more requests will come in, apache will spawn new child processes, each one spawning 25 threads,
# enlarging the thread pool until the total number of threads become 50. In that case, apache begin
# to cleanly drop processes, trying to reach 25 threads.
# New processes and its threads are spawned in case of a large spike of requests, until 200 parallel
# client requests are reached, then apache will no longer accept new incoming connections.
# When the load calm down, and requests come back under 200 parallel connections, apache will continue
# to accept connections. After 25, 000 requests served by a child, q. 1000 per thread, the process
# get closed by the father to ensure no memory leak is fired.
<IfModule worker.c>
ServerLimit      16
StartServers         2
MaxClients       400
MinSpareThreads   25
MaxSpareThreads  50 
ThreadsPerChild    25
MaxRequestsPerChild  1000
ThreadLimit          64 
ThreadStackSize      1048576
</IfModule>
#####################

Und dann einige Einstellungen in fcgid.conf

FcgidMinProcessesPerClass 0 
FcgidMaxProcessesPerClass 8 
FcgidMaxProcesses  25
FcgidIdleTimeout 60 
FcgidProcessLifeTime 120 
FcgidIdleScanInterval 30

Wie verlangt meine Ausgabe für /etc/my.cnf

[mysqld]
datadir = / var / lib / mysql
socket = / var / lib / mysql / mysql.sock
Benutzer = MySQL

# überspringen-innodb

connect_timeout = 10
max_connections = 300
symbolische Links = 0
innodb_file_per_table = 1
myisam_sort_buffer_size = 8M
read_rnd_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
sort_buffer_size = 512K
table_cache = 32
max_allowed_packet = 1M
Schlüssel_Puffer = 16k
query_cache_type = 1
Abfrage-Cache-Größe = 32M
thread_cache_size = 16
net_buffer_length = 2K
thread_stack = 256K
wait_timeout = 300

slow_query_log

# log-slow-queries = / var / log / mysql / langsam-anfragen.log
langsam_query_log = / var / log / mysql / langsam-anfragen.log
long_query_time = 1

[mysqld_safe]
Protokollfehler = / var / log / mysqld.log
pid-Datei = / var / run / mysqld / mysqld.pid

Und PHP memory_limit = 64M


9
2018-03-25 08:52


Ursprung


Irgendwelche Ideen irgendjemand? - user1287874
Also, von den 1 GB, die Sie haben, wenn Apache 750 MB nimmt, wie stellen Sie sich vor, dass andere 250 verteilt werden? Das ist wirklich wichtig ... Ich frage, weil 750 sehr unrealistisch und ungesund ist. Von diesem 1 GB realistisch, wenn Sie ein leistungsfähiges System ~ 200 - 250 MB wollen, ist wahrscheinlich der Höchstwert - Hrvoje Špoljar


Antworten:


Bei diesen Einstellungen geht es um das Gleichgewicht, wie hoch Sie sie erhalten können, ohne zu riskieren, dass nicht genügend Arbeitsspeicher zur Verfügung steht und der Server abstürzt oder Ihre Prozesse vom übergeordneten vps-System beendet werden. Aus diesem Grund erhalten Sie SegFaults.

Normalerweise, wenn ich einen Server optimiere, führe ich das Skript mysql tuning-primer.sh aus, um eine Vorstellung davon zu bekommen, wie viel Speicher maximal MySQL nutzen kann:

https://launchpad.net/mysql-tuning-primer

Dann würde ich für Prefork MaxClients mit dem php memory_limit multiplizieren, um eine Vorstellung davon zu bekommen, wie viel Speicher Apache + PHP maximal nutzen kann. Dies sind grobe Schätzungen, aber wenn Sie das schon oft getan haben, bekommen Sie ein Gefühl dafür.

Ich versuche, die Summe dieser 2 um den maximalen Speicher des Servers herum zu halten, wenn Ihr VPS keine Swap-Partition hat, würde ich definitiv versuchen, es aus verschiedenen Gründen niedriger als max RAM zu halten:

1) Die anderen Prozesse auf dem Server verwenden Speicher

2) Einige PHP-Skripte auf dem Server verwenden möglicherweise ini_set, um die memory_limit für sich selbst zu ändern.

Wenn Sie die /etc/my.cnf und php memory_limit zur Verfügung stellen können, kann ich vielleicht einige gute Einstellungen für Sie finden.


edit: Ich wollte nur erwähnen, ich weiß, dass Sie mit Worker und nicht Prefork, die gleichen Konzepte gelten, aber Arbeiter muss mit Threads und nicht nur MaxClients beschäftigen, so Prefork war ein besseres Beispiel. Ich würde die Einstellungen überprüfen müssen, nachdem ich die angeforderten Informationen erhalten habe, um Ihnen einen guten Rat zu geben


0
2018-03-30 21:04



Hallo Michael, ich habe seitdem meine Einstellungen aktualisiert (nachdem ich einige Tipps von Leuten bekommen habe) habe ich seitdem Serverlimit auf 8 Max Clients runter auf 200 und FCGID runter auf 10 verschoben - werde es im Auge behalten und sehen wie es geht. Ich werde die Ausgaben bald im Original veröffentlichen - user1287874
wie bald? April? - Eddie