fail2ban memory usage

Fórumok

Üdv!

Létezik, hogy a fail2ban ennyi memóriát eszik? :o

Processz ID Tulajdonos Méret Parancs
...
742 root 881640 kB /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock - ...
...

Ez ~860MB, ha jól látom. Csak ssh és 3db httpd (w00tw00t,http-dos,not-found) szabály van engedélyezve. (A nemrég itt a fórumon tárgyalt szabályok.)

Tényleg ennyit foglal? :o

A logfájlok nem nagyok:
1,1MB /var/log/secure*
7,5MB /var/log/httpd/*

update:

Az /etc/default/fail2ban-be berakott pl. "ulimit -s 256" nem segít, nem változik semmi. (centos 6.5 x64)

G.

Hozzászólások

Ha jól értem, akkor a 1009m (VIRT) a teljes használat - mindent beleértve:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

4477 root 20 0 1009m 9844 2600 S 0.0 0.5 0:12.89 fail2ban-server

A RES=9844 (kb) a fizikai memóriából foglalt tényleges mérete (rezidens).
A SHR=2600 (kb) a shared memória foglaltsági mérete.

A VIRT azt jelenti, amennyit az OS a processz számára fenntart, de a processz azt még nem használja fel. A virtuális memória lényege, hogy a processznek nem kell tudnia, mennyi RAM van a gépben, mert azt az OS kezeli. Az OS a memória lefoglalási kérelemnél eldöntönti, van-e annyi fizikai RAM és szabad SWAP, hogy kielégítse a kérést. Ha nincs, akkor hibával visszadobja. Ha van, akkor azt mondja: szabad. De ez nem jelenti azt, hogy a program fel is használja a lefoglalt puffert.

Példa kód (test_malloc.c):

#include <stdio.h>
#include <stdlib.h>

// 100 MB
#define ELEMENT_COUNT 26214400

int main()
{
char line[256];
int *buffer;
int i;
int buffer_size;

buffer_size = sizeof(int)*ELEMENT_COUNT;

printf("Before malloc. Press ENTER\n");
gets(line);

// memoria lefoglalasa
buffer = (int *)malloc(buffer_size);
if (NULL == buffer)
{
perror("malloc");
}
printf("After malloc, before filling puffer. Press ENTERt\n");
gets(line);

// puffer feltoltese
for (i=0; i< ELEMENT_COUNT;i++)
{
buffer[i]=127;
if ((i+1) % 1048576==0)
printf("%d done\n", i );
}

printf("After filling up puffer. Press ENTER to quit\n");
gets(line);

free(buffer);

return 0;
}

Fontos: a fenti kód csak példa, a gets() használata PROD kódban nem javasolt!
Fordítás: gcc ./test_malloc.c -o test_malloc

Ezután lefuttattam, kikerestem a PID-jét.
A "Before malloc" esetnél ezt mutatta a top (VIRT=4164, RES=356, SHR=276):

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5058 szenti 20 0 4164 356 276 S 0 0.1 0:00.00 test_malloc

Az "After malloc" esetnél (VIRT=104m, RES=356, RES=276):

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5058 szenti 20 0 104m 356 276 S 0 0.1 0:00.00 test_malloc

Miután feltöltötte a puffert adatokkal (VIRT=104m, RES=100m, SHR=400):

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5058 szenti 20 0 104m 100m 400 S 0 34.1 0:00.11 test_malloc

Remélem, így már világos.