[FUG-BR] teste do mod_evasive rodando lento na VM [RESOLVIDO]

Marcelo Gondim gondim em bsdinfo.com.br
Terça Setembro 10 22:55:41 BRT 2013


Em 10/09/13 18:49, vic escreveu:
> Em 2013-09-10 17:59, Marcelo Gondim escreveu:
>> Em 10/09/13 17:40, vic escreveu:
>>> Em 2013-09-10 15:26, Marcelo Gondim escreveu:
>>>> Em 10/09/13 10:16, vic escreveu:
>>>>> Em 2013-09-10 9:23, Marcelo Gondim escreveu:
>>>>>> Pessoal,
>>>>>>
>>>>>> Sei que muitos aqui conhecem o mod_evasive pro apache que no
>>>>>> FreeBSD
>>>>>> é
>>>>>> o
>>>>>> pacote ap22-mod_evasive.
>>>>>> Ele vem com um script de teste que sempre utilizei pra checar se o
>>>>>> mod_evasive tá legal:
>>>>>>
>>>>>> test.pl:
>>>>>>
>>>>>> #!/usr/bin/perl
>>>>>> # test.pl: small script to test mod_dosevasive's effectiveness
>>>>>> use IO::Socket;
>>>>>> use strict;
>>>>>> for(0..100) {
>>>>>>       my($response);
>>>>>>       my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
>>>>>>                                           PeerAddr=>
>>>>>> "127.0.0.1:80");
>>>>>>       if (! defined $SOCKET) { die $!; }
>>>>>>       print $SOCKET "GET /?$_ HTTP/1.0\n\n";
>>>>>>       $response = <$SOCKET>;
>>>>>>       print $response;
>>>>>>       close($SOCKET);
>>>>>> }
>>>>>>
>>>>>> Só que quando rodo numa VM com FreeBSD ele abre as conexões
>>>>>> lentamente,
>>>>>> fazendo com que o teste não funcione. Fiz o mesmo teste em um
>>>>>> FreeBSD
>>>>>> sem ser VM e rodou mais rápido e consegui fazer os testes. Fui
>>>>>> comparar
>>>>>> com uma outra máquina com Linux e rodou estupidamente mais rápido.
>>>>>> Logicamente que diferenças de processamento podem ser uma das
>>>>>> causas
>>>>>> mas
>>>>>> porque rodou tão lento numa VM é que não descobri ainda.
>>>>>>      Alguém tem alguma ideia?
>>>>>>
>>>>>> Grande abraço
>>>>> Suponho que sua aquela sua VM em Xen. Por acaso você tem um firewall
>>>>> PF
>>>>> na VM? Se sim tente:
>>>>>
>>>>> ifconfig xn0 -tso
>>>>> sysctl -w net.inet.tcp.tso=0
>>>>>
>>>>> Referências:
>>>>>
>>>>> http://www.freebsd.org/cgi/query-pr.cgi?pr=154428
>>>>> http://www.freebsd.org/cgi/query-pr.cgi?pr=135178
>>>>>
>>>>> Além disso, se você não compilou o kernel XENHVM, faça um teste com
>>>>> ele
>>>>> e mude a configuração do xen na vif para usar o type=netfront
>>>>>
>>>> É vic compilei com o XENHVM fiz as mudanças de disco e interface de
>>>> rede
>>>> e mesmo assim continua lento as conexões localhost do test.pl:
>>>>
>>>> # df -h
>>>> Filesystem     Size    Used   Avail Capacity  Mounted on
>>>> /dev/xbd0p2      2G    190M    1.6G    10%    /
>>>> devfs          1.0k    1.0k      0B   100%    /dev
>>>> /dev/xbd0p4     58G     15G     37G    29%    /var
>>>> /dev/xbd0p5     31G    6.0G     22G    21%    /usr
>>>> /dev/xbd0p6      2G     16M    1.8G     1%    /tmp
>>>>
>>>> xn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu
>>>> 1500
>>>>        options=503<RXCSUM,TXCSUM,TSO4,LRO>
>>>>        ether 00:16:3e:02:9d:d6
>>>>        inet xx.xxx.xxx.xx netmask 0xfffffff8 broadcast 67.212.89.79
>>>>        inet6 fe80::216:3eff:fe02:9dd6%xn0 prefixlen 64 scopeid 0x6
>>>>        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>>>>        media: Ethernet manual
>>>>        status: active
>>>>
>>>> # uname -a
>>>> FreeBSD xxxx.xxx.xxx.xx 9.2-PRERELEASE FreeBSD 9.2-PRERELEASE #0
>>>> r255410M: Tue Sep 10 14:58:33 BRT 2013
>>>> root em xxxx.xxx.xxx.xx:/usr/obj/usr/src/sys/XENHVM  amd64
>>>>
>>>> Quem tiver a curiosidade de fazer esse teste nas mesmas condições que
>>>> eu
>>>> aqui, seria interessante. Abaixo os dados:
>>>>
>>>> No servidor Debian 7 amd64
>>>> ii  libxen-4.1                         4.1.4-3+deb7u1 amd64
>>>> Public libs for Xen
>>>> ii  libxenstore3.0                     4.1.4-3+deb7u1 amd64
>>>> Xenstore communications library for Xen
>>>> ii  xen-hypervisor-4.1-amd64           4.1.4-3+deb7u1 amd64
>>>> Xen
>>>> Hypervisor on AMD64
>>>> ii  xen-linux-system-3.2.0-4-amd64     3.2.46-1+deb7u1 amd64
>>>> Xen
>>>> system with Linux 3.2 on 64-bit PCs (meta-package)
>>>> ii  xen-linux-system-amd64             3.2+46 amd64        Xen system
>>>> with Linux for 64-bit PCs (meta-package)
>>>> ii  xen-system-amd64                   4.1.4-3+deb7u1 amd64
>>>> Xen
>>>> System on AMD64 (meta-package)
>>>> ii  xen-tools                          4.3.1-1 all          Tools to
>>>> manage Xen virtual servers
>>>> ii  xen-utils-4.1                      4.1.4-3+deb7u1 amd64
>>>> XEN
>>>> administrative tools
>>>> ii  xen-utils-common                   4.1.4-3+deb7u1 all
>>>> Xen
>>>> administrative tools - common files
>>>> ii  xenstore-utils                     4.1.4-3+deb7u1 amd64
>>>> Xenstore utilities for Xen
>>>>
>>>> Arquivo conf da VM:
>>>>
>>>> kernel = '/usr/lib/xen-4.1/boot/hvmloader'
>>>> builder = 'hvm'
>>>> vcpus = 4
>>>> memory = 2048
>>>> shadow_memory = 8
>>>> name = 'freeba'
>>>> vif = [ 'type=netfront, model=e1000, bridge=xenbr0', ]
>>>> #vif = [ 'type=ioemu, bridge=xenbr0, mac=00:00:00:ff:fe:01' ]
>>>> disk = [
>>>> 'file:/home/xen/domains/freeba/freeba.img,xvda,w',
>>>> 'file:/home/xen/domains/freeba/FreeBSD-9.2-PRERELEASE-amd64-20130831-r255108-disc1.iso,xvdc:cdrom,r'
>>>> ]
>>>> device_model = '/usr/lib/xen-4.1/bin/qemu-dm'
>>>> boot = 'cd'
>>>> sdl=0
>>>> vnc = '1'
>>>> vncviewer = '1'
>>>> vnclisten = "0.0.0.0"
>>>> vncpasswd = 'songamonga'
>>>> stdvga=0
>>>> serial='pty'
>>>> usbdevice='tablet'
>>>> on_poweroff = 'destroy'
>>>> on_reboot   = 'restart'
>>>> on_crash    = 'restart'
>>>>
>>>> Pacote do mod_evasive no FreeBSD:  www/mod_evasive -
>>>> ap22-mod_evasive-1.10.1_1      An Apache module to try to protect the
>>>> HTTP Server from DoS/DDoS attacks
>>>>
>>>> []'s
>>>> Gondim
>>> Eu instalei o www/apache22 num 9.1 XENVHM e rodei o test.pl e o ab -kc
>>> 10 -t 30 http://IP_VM/ a partir do meu computador.
>>>
>>> Depois eu instalei e habilitei o mod_evasive e refiz os teste. Ambos
>>> rodaram... claro que o test.pl teve uns 403 e o ab não teve todas as
>>> requisições respondidas.. mas isso era esperado. Todos os testes
>>> rodaram
>>> rapidinho.
>>>
>>> Na minha conf do xen não tem setado
>>>
>>> shadow_memory
>>> usbdevice
>>> e o cdrom (afinal já instalei)
>>> com 4Gb de memória
>>> vcpus=2
>>>
>>> O host é um Scientific Linux 6 com linux 3.8.7-1.el6xen.x86_64
>>>
>> Oi vic mas você tem outras VMs rodando nesse servidor? Nesse aqui tem
>> mais 2 VMs.
>> Estranho mesmo. Tem como você me passar o seu kernel em anexo em pvt?
>> Pra eu comparar e ver se tem algo habilitado demais aqui.
>> Vou tentar também sem esses parâmetros acima.
>>
>> []'s
>> Gondim
>>
> No servidor tem mais 2 VM, um FreeBSD 7.4 i386 (app legado), um
> Slackware 13.1 i386 (outro app legado) e esse FreeBSD 9.1 rodando apps
> em java.
>
> Segue conf do kernel
>
> include		GENERIC
> ident		XENHVM
>
> #
> # Adaptive locks rely on a lock-free pointer read to determine the run
> state
> # of the thread holding a lock when under contention; under a
> virtualisation
> # system, the thread run state may not accurately reflect whether the
> thread
> # (or rather its host VCPU) is actually executing.  As such, disable
> this
> # optimisation.
> #
> options 	NO_ADAPTIVE_MUTEXES
> options 	NO_ADAPTIVE_RWLOCKS
> options 	NO_ADAPTIVE_SX
>
> # Xen HVM support
> options 	XENHVM
> device		xenpci
>
> cat /boot/loader.conf
>
> # XEN console support
> boot_multicons="YES"
> boot_serial="YES"
> comconsole_speed=9600
> console="comconsole,vidconsole"
>
Pessoal, era uma besteira! Ficava mais lento porque na verdade à cada 
conexão na página havia uma conexão ao mysql. Deixando no html puro, 
ficou perfeito.  :)
Resolvido o mistério e fica aqui pro histórico caso alguém passe por 
algo parecido.

[]'s
Gondim




Mais detalhes sobre a lista de discussão freebsd