capsob
Goto Top

Apache 2.4 stürzt ab, nachdem auf PHP7.3 umgestellt wurde

Hallo Community!

Ich hoffe, dass ihr mir bei meinem Problem helfen könnt.

Bei uns im Unternehmen läuft ein Apache 2.4 (x86) Server mit PHP 5.6 aktuell auf einem Windows Server 2012 R2 x64.

Ich habe heute Vormittag PHP auf 7.3 TS-x86 aktualisieren wollen.

Als ich von der Mittagspause zurück kam, war die Website nicht mehr erreichbar.

Der error.log des Apaches gibt aus, dass:

[Tue Nov 12 11:32:34.047764 2019] [mpm_winnt:notice] [pid 1184:tid 448] AH00418: Parent: Created child process 1428
[Tue Nov 12 11:32:34.657185 2019] [mpm_winnt:notice] [pid 1428:tid 504] AH00354: Child: Starting 3000 worker threads.

VirtualAlloc() failed: [0x00000008] Für diesen Befehl ist nicht genügend Speicher verfügbar.


VirtualFree() failed: [0x000001e7] Es wurde versucht, auf eine unzul䳳ige Adresse zuzugreifen.


VirtualAlloc() failed: [0x00000008] Für diesen Befehl ist nicht genügend Speicher verfügbar.


VirtualFree() failed: [0x000001e7] Es wurde versucht, auf eine unzul䳳ige Adresse zuzugreifen.

Hat jmd eine Idee, wo ich anfangen sollte nachzuschauen, an was es liegt?

PHP hat 1GB memory_limit.

Content-Key: 514177

Url: https://administrator.de/contentid/514177

Printed on: April 23, 2024 at 19:04 o'clock

Member: godlie
godlie Nov 12, 2019 at 12:04:56 (UTC)
Goto Top
Hallo,

das sieht entweder nach zu wenig Memory aus, oder das dein x86 ( 32Bit ) Prozess versucht zuviel zu Addressieren.

Du kannst mal versuchen das memory_limit auf 2G hochzustellen, ansonsten würd ich dir raten,
auf die 64bit Versionen umzusteigen
Member: capsob
capsob Nov 12, 2019 at 12:08:19 (UTC)
Goto Top
Zitat von @godlie:
... das dein x86 ( 32Bit ) Prozess versucht zuviel zu Addressieren...

Ich glaube, dass ist das Problem, aber wie kann ich dem entgegenwirken?


Des Weiteren glaube ich nicht, dass der Memory allein ein Problem ist. Bei der 5.6er PHP steht er auf 128MB und es läuft problemlos.

memory_limit = 128M
Member: godlie
godlie Nov 12, 2019 at 12:27:47 (UTC)
Goto Top
Hallo,

also das Problem mit dem memory limit kannst du umgehen in dem auf 64bit umstellst.

Versuch doch mal dein memory limit runterzusetzen, auf die o.g. 128M

Denn ich glaube, dass dir der Apache absackt da er für jeden child versucht den 1G zu reservieren

Standartmäßig startet der Apache so 5-10 childThreads, dann wirds mit der "magischen 4GB" Grenze für einen 32bit Prozess gleich mal finster.

Also meine Empfehlung: Apache u. PHP auf x64 hochziehen, wir sind ja nicht mehr in der Steinzeit.
Member: capsob
capsob Nov 12, 2019 at 12:42:48 (UTC)
Goto Top
Zitat von @godlie:
...Versuch doch mal dein memory limit runterzusetzen, auf die o.g. 128M

Denn ich glaube, dass dir der Apache absackt da er für jeden child versucht den 1G zu reservieren...

Test läuft gerade face-smile
Member: StefanKittel
StefanKittel Nov 12, 2019 at 13:38:55 (UTC)
Goto Top
Starting 3000 worker threads
Wieso 3000 worker Threads?
Member: capsob
capsob Nov 12, 2019 at 13:46:37 (UTC)
Goto Top
Zitat von @StefanKittel:

Starting 3000 worker threads
Wieso 3000 worker Threads?

Ja das weiß ich auch nicht ^^
Member: godlie
godlie Nov 12, 2019 at 13:50:06 (UTC)
Goto Top
Zitat von @StefanKittel:

Starting 3000 worker threads
Wieso 3000 worker Threads?

Hm das ist mir wohl nicht aufgefallen. hier erklärt es sich dann recht schnell.

<IfModule mpm_winnt_module>
    ThreadsPerChild      1000
    MaxRequestsPerChild    0
</IfModule>

Ich würd da mal mit den Werten auf was Vernünftiges gehen, wenns denn immer noch 32bit sein muss face-smile
Member: capsob
capsob Nov 12, 2019 at 14:35:55 (UTC)
Goto Top
Threadlimit 3000
ThreadsPerChild 3000
MaxRequestsPerChild 0 
KeepAlive On 
KeepAliveTimeout 15 

So steht das aktuell drin.

ThreadsPerChild 1000 - okay, aber Threadlimit dann auch auf 1000?
Member: godlie
Solution godlie Nov 12, 2019 at 15:19:44 (UTC)
Goto Top
ThreadsPerChild ist normal 25
ThreadLimit sollte 64 sein

Wenn deine Seite langsam wird dadurch dann gibt es hier eine schöne Lektüre

Optimizing Apache
Member: capsob
capsob Nov 18, 2019 at 07:08:34 (UTC)
Goto Top
Also der Apache läuft nun ein gute Woche konstant ohne Probleme durch.

Das Problem war die falsch eingestellten Werte bei "ThreadsPerChild" und "ThreadLimit".

Also nächstes steht auf dem Plan, Apache auf 64-Bit umzustellen face-smile

Danke an alle!