Ingent

Ingent Network

  • Entreu
  • Registreu-vos

Language

  • English
  • Español
  • Català

RSS Feeds

  • Network
  • Mòduls
    • Facturació fàcil amb Haltr
    • Gestió de sistemes amb Initr
  • Blog

Posts marcats amb performance

Accelerar el temps de càrrega de les aplicacions RubyOnRails

Mar 23

Publicat per Lluís a administració de sistemes

No comments

A vegades quan accedim a una aplicació RubyOnRails notem que la primera petició triga molt i després ja va més fluït. Això passa perquè a la primera connexió el Passenger ha de carregar l’aplicació en memòria, quan es deixen de rebre peticions durant un cert temps, el Passenger la descarrega i a la següent petició caldrà tornar a aixecar-la.
Podem evitar aquesta espera si mantenim sempre una o més instàncies de l’aplicació aixecades. Passenger ens permet configurar-ho amb el paràmetre PassengerMinInstances

PassengerMaxPoolSize 15
PassengerPoolIdleTime 10

<VirtualHost *:80>
    ServerName foobar.com
    DocumentRoot /webapps/foobar/public
    PassengerMinInstances 3
</VirtualHost>

amb aquesta configuració tindrem com a mínim sempre tres instàncies aixecades per servir peticions, excepte quan acabem d’engegar l’Apache, ja que per defecte el Passenger no carregarà les instàncies. Podem fer que es carreguin a l’engegar l’Apache amb PassengerPreStart:

PassengerMaxPoolSize 15
PassengerPoolIdleTime 10

<VirtualHost *:80>
    ServerName foobar.com
    DocumentRoot /webapps/foobar/public
    PassengerMinInstances 3
</VirtualHost>

PassengerPreStart http://foobar.com/

Així en arrencar l’Apache es farà una petició a la URL indicada i es carregaran les instàncies de Passenger.

Al comprovar la nova configuració, ens surt aquest error:

[root@webserver ~]# apache2ctl configtest
Syntax error on line 4 of /etc/apache2/sites-enabled/foobar.com.conf:
Invalid command 'PassengerMinInstances', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.

és perquè la versió de Passenger que porta Debian Squeeze (2.2.11debian), encara no suporta PassengerMinInstances, desinstal·lem el paquet libapache2-mod-passenger i instal·lem el Passenger amb Rubygems:

[root@webserver ~]# gem install passenger --no-ri --no-rdoc
# /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
   PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.11
   PassengerRuby /usr/bin/ruby1.8
</IfModule>
# /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
[root@webserver ~]# a2enmod passenger
[root@webserver ~]# /etc/init.d/apache2 restart

Optimitzar Munin amb tmpfs

Oct 24

Publicat per Lluís a administració de sistemes

No comments

Al servidor on allotgem les webs, l’Apache cada vegada anava més lent.
Un apachectl fullstatus ens mostrava molts workers en estat L (“Logging”) esperant obtenir accés a disc.
Vam descobrir que el problema era el Munin, a mida que havíem anat afegint nodes i gràfiques, el rendiment havia anat baixant. Cada node té unes 80 bases de dades RRD, depenent del nombre de gràfiques; si monitoritzem uns 50 nodes, són uns 4000 fitxers RRD a actualitzar cada 5 minuts i l’accés a disc comença a ser un problema.

Per solucionar-ho vam moure les bases de dades a la memòria RAM
reducció de iowait
a la gràfica es veu clarament com va desaparèixer l’espera per accedir al disc (iowait)

Configurar munin + tmpfs

per reduir l’espai usat, no esta de més esborrar els RRD antics que ja no s’utilitzin

# find /var/lib/munin/ -type f -name "*.rrd" -mtime +120 -delete
# du -sh /var/lib/munin
305M    /var/lib/munin

fem una còpia de la carpeta

# cp -ra /var/lib/munin/ /var/lib/munin-cache

afegim a /etc/fstab una partició tmpfs prou gran per posar-hi /var/lib/munin i amb l’uid i gid de l’usuari munin

tmpfs                  /var/lib/munin  tmpfs   uid=108,gid=111,size=512M,mode=755 0 0

la muntem i hi copiem les dades

# rm -rf /var/lib/munin/*
# mount /var/lib/munin
# cp -ra /var/lib/munin-cache/* /var/lib/munin/

ara tenim les bases de dades RRD a la RAM, l’accés a disc ja no hauria de ser un problema, però si s’apaga el servidor es perden les dades de la RAM, per tant cal programar un cron que vagi copiant les dades a disc

posem a /etc/cron.hourly/munin-cache

#!/bin/sh
# hem posat /var/lib/munin a la RAM, cal copiar-ho a /var/lib/munin-cache
# per no perdre les dades en cas de reiniciar.
cp -ra /var/lib/munin/* /var/lib/munin-cache/

i ho fem executable

# chmod +x /etc/cron.hourly/munin-cache

per que es restauri automàticament la còpia a l’engegar, afegim a /etc/rc.local

# cp -ra /var/lib/munin-cache/* /var/lib/munin/
    • Recent comments
    • Archives
    • Tags
    • Categories
    • b2b (1)
    • products (1)
    • administració de sistemes (11)
    accounting b2b backscatting bandwidth centos cloud debian desktop exchange internet explorer iowait java kvm linux mdadm migration munin p2v passenger peppol performance php postfix products raid raid5 rdp ruby on rails server services shorewall terminal server tmpfs traffic virtualization windows wine workstation
    • març 2012 (2)
    • febrer 2012 (2)
    • gener 2012 (1)
    • desembre 2011 (1)
    • novembre 2011 (3)
    • octubre 2011 (2)
    • agost 2011 (2)
    • Ahlonko: Nice Post ...It's gonna save me lot of time. THANK
    • windows_7: Ante la próxima desaparición de Windows XP, la necesidad de las empresas de migrar a Windows 7 se h...
    • Lluís: Hi Philip, thanks for this point, updated post!
    • Philip Helger: Hi! There's a little typo in this page. The generated DNS names should start with upperbase "B"...
Copyright © 2021 Ingent RSS Feeds