Portál AbcLinuxu, 5. května 2025 15:10

Dotaz: Apache 2 - Cannot allocate memory

vandrovnik avatar 10.1.2017 11:19 vandrovnik | skóre: 21
Apache 2 - Cannot allocate memory
Přečteno: 483×
Odpovědět | Admin
Ahoj,

mám problém s Apache. Běží na Centos 7 64 bit, stroj má 64 GB RAM. Při větší zátěži se v logu objevují hlášky:
[Tue Jan 10 08:04:52.110976 2017] [mpm_prefork:error] [pid 7629] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
[Tue Jan 10 08:05:02.121255 2017] [mpm_prefork:error] [pid 7629] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
.Out of memory (Needed 122280 bytes)
.Out of memory (Needed 105976 bytes)
.Out of memory (Needed 138584 bytes)
[Tue Jan 10 08:05:21.143902 2017] [mpm_prefork:error] [pid 7629] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
.Out of memory (Needed 32608 bytes)
.Out of memory (Needed 43032 bytes)
Volné paměti by mělo být spousta:
# free
              total        used        free      shared  buff/cache   available
Mem:       65695024     9615456      661172     1787244    55418396    53590956
Swap:       8388604        1384     8387220
Musel jsem zatím v httpd.conf přidat tohle, což samozřejmě není zrovna dobré nastavení (už s MaxClients 100 to mělo opět problém s pamětí):
<IfModule prefork.c>
   StartServers        5
   MinSpareServers     5
   MaxSpareServers     10
   MaxClients          50
   MaxRequestsPerChild 3000
</IfModule>
Můžete mě prosím někdo nakoupnout, co je kde špatně? Možná nějaký limit mimo samotného Apache, ale nevím, kde.

Díky, KR
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.1.2017 12:39 MP
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud skutecne nic neleakuje, tak bych se kouknul na php/system/atd limity ohledne pametovych parametru.
10.1.2017 12:41 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak mas omezene limity?
cat /proc/7629/limits
vandrovnik avatar 10.1.2017 12:58 vandrovnik | skóre: 21
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Teď už jsou jiné ID procesů, výpis tady:
root     23176  0.1  0.0 543156 35248 ?        Ss   09:57   0:13 /usr/sbin/httpd -DFOREGROUND
apache   30898  0.1  0.0 655940 36604 ?        S    12:49   0:00 /usr/sbin/httpd -DFOREGROUND

# cat /proc/23176/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             256534               256534               processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       256534               256534               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

# cat /proc/30898/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             256534               256534               processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       256534               256534               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
10.1.2017 13:07 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Hmm, na prvni ospaly pohled nic podezreleho.
Budes tam nejspis nekde mit memory leak. Nejdriv zkus snizit MaxRequestsPerChild na 1000. Procesy se budou otacet casteji.
Pak bych zacal zkoumat, co to tam vlastne provozujes. Nejaky mod_php, mod_python nebo tak neco?
vandrovnik avatar 10.1.2017 17:43 vandrovnik | skóre: 21
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Celkem jednoduchou webovou aplikaci napsanou v php, která se připojuje k mariadb. U mariadb jsme ráno měli taky hlášky ohledně paměti, to byla ale nejspíš moje blbost, že jsem po instalaci nezkopíroval vzorový my_něco.conf k ostatním konfiguračním souborům (a během testování jsem si toho nevšimnul, protože s malou zátěží se problém neprojevil). Doplněním konfigurace a restartem mariadb se to spravilo.

I ve chvíli, kdy si httpd neustále stěžoval, že nemůže alokovat svých pár bajtů, ukazoval výpis z free, že má k dispozici přes 53 GB (opravdu GB, né MB). Napadlo mě proto, že se v Centos 7 nově musí nastavit limity pro procesy (přes cgroups?), ale nemůžu najít žádné nastavení, které by teď tu paměť omezovalo.

Vidím to na večerní restart, protože teď to mj. píše:
# systemctl status httpd
Failed to get properties: Connection timed out
(Apache přitom funguje, tuhle hlášku systemctl hodí, i když se ptám na status jiných služeb.)
11.1.2017 08:51 MP
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
To, ze je volna pamet neznamena, ze je zaroven i volna pamet o urcite velikosti. Pamet je totiz rozsekana na bloky a kdyz dojde k vycerpani bloku, tak to klidne i spusti OOM killer.
11.1.2017 09:13 R
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory
Akoze v 53 GB sa nenajde 100KB blok? Dost tazko predstavitelne...
11.1.2017 10:04 MP
Rozbalit Rozbalit vše Re: Apache 2 - Cannot allocate memory

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.