PHP consome toda a memória

2

Desde hoje de manhã, uma das memórias do nosso servidor web é preenchida pelo php, o que eventualmente faz com que o servidor comece a trocar, diminuir a velocidade e ficar indisponível (um login ssh demora 5 minutos e às vezes ele morre completamente) ...

Gostaria de saber como você resolveria esse tipo de problema.

Jul 23 06:16:31 websrv2 kernel: [10409040.981882] php-cgi invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0
Jul 23 06:16:31 websrv2 kernel: [10409040.981888] php-cgi cpuset=/ mems_allowed=0
Jul 23 06:16:31 websrv2 kernel: [10409040.981892] Pid: 27697, comm: php-cgi Not tainted 2.6.32-5-amd64 #1
Jul 23 06:16:31 websrv2 kernel: [10409040.981894] Call Trace:
Jul 23 06:16:31 websrv2 kernel: [10409040.981903]  [<ffffffff810b6714>] ? oom_kill_process+0x7f/0x23f
Jul 23 06:16:31 websrv2 kernel: [10409040.981908]  [<ffffffff8106bdee>] ? timekeeping_get_ns+0xe/0x2e
Jul 23 06:16:31 websrv2 kernel: [10409040.981912]  [<ffffffff810b6c38>] ? __out_of_memory+0x12a/0x141
Jul 23 06:16:31 websrv2 kernel: [10409040.981916]  [<ffffffff810b6d8f>] ? out_of_memory+0x140/0x172
Jul 23 06:16:31 websrv2 kernel: [10409040.981921]  [<ffffffff810baaf4>] ? __alloc_pages_nodemask+0x4ec/0x5fc
Jul 23 06:16:31 websrv2 kernel: [10409040.981927]  [<ffffffff810d92d8>] ? read_swap_cache_async+0x5d/0xf3
Jul 23 06:16:31 websrv2 kernel: [10409040.981931]  [<ffffffff810d93c5>] ? swapin_readahead+0x57/0x98
Jul 23 06:16:31 websrv2 kernel: [10409040.981937]  [<ffffffff8100c18d>] ? __raw_callee_save_xen_pte_val+0x11/0x1e
Jul 23 06:16:31 websrv2 kernel: [10409040.981941]  [<ffffffff810cd245>] ? handle_mm_fault+0x47f/0x80f
Jul 23 06:16:31 websrv2 kernel: [10409040.981947]  [<ffffffff813001a6>] ? do_page_fault+0x2e0/0x2fc
Jul 23 06:16:31 websrv2 kernel: [10409040.981952]  [<ffffffff812fe045>] ? page_fault+0x25/0x30
Jul 23 06:16:31 websrv2 kernel: [10409040.981954] Mem-Info:

Eu tento seguir o caminho para classificar os processos por uso de memória:

ps -e -orss =, args = | sort -b -k1,1n | pr -TW $ COLUMNS

Eu vejo um bando de / usr / bin / php-cgi consumindo memória. Como posso limitar o consumo total de memória pelo PHP para que o servidor nunca seja levado ao limite para usar toda a memória / troca e ficar indisponível?

Mais informações do sistema:

ii  php5                                5.3.3-7+squeeze18            server-side, HTML-embedded scripting language (metapackage)
ii  apache2                             2.2.16-6+squeeze11           Apache HTTP Server metapackage
    
por posttek 23.07.2014 / 14:47

2 respostas

0

você pode limitar o uso de memória de um usuário (o usuário que executa os processos php-cgi) com cgroups.

por exemplo, para limitar o uso de memória de um usuário, você pode fazer o seguinte:

# file: /etc/cgconfig.conf
group php {
    memory {
        memory.limit_in_bytes = "2G";
    }
}

E então você tem que adicionar seu usuário php-cgi a este cgroup-group:

# file: /etc/cgrules.conf
phpcgiuser   memory   php

Se você quiser limitar o uso de memória por processo, você pode fazer isso com ulimit (100 MB por processo).

# file: /etc/security/limits.conf
phpcgiuser  hard  as   102400

Editar: No entanto, você deve analisar o software o que está causando o vazamento de memória.

    
por 23.07.2014 / 20:48
0

Se este é o resultado do uso regular, você deve verificar esses scripts PHP para vazamento de memória, loops infinitos e problemas assustadores.

    
por 23.07.2014 / 20:54