RoR sur un kimsufi


#1

Salut !

J’avais posté le week-end dernier sur le forum, mais vu que mes messages
ne sont
toujours pas apparus sur la ML, je rebalance.

J’ai tenté l’expérience de louer un kimsufi [1] pour y faire tourner
Rails…
c’est plutot un bide.

Hier j’ai tenté tout simplement de faire tourner Mongrel, tout seul, sur
une
application toute con. Le serveuer à commencé à swapper rapidement, c’était
quasi inutilisable… 3 ou 4 secondes pour accéder à chaque page !!!

Mon appli n’est pas grosse, je compte pas avoir 1000 requetes par
seconde, donc
je pensais qu’un petit serveur dans le style suffirait. C’est
apparemment faux.

Avant d’abandonner définitivement la solution kimsufi, y a-t-il un moyen
de
servir du Rails qui utiliserait moins de RAM ?
Au passage, j’utilise sqlite3, pensant que ça prend moins de ressources
que
mySQL par exemple.

Merci !

gUI

[1] http://www.kimsufi.com


Guillaume B. : (05 61) 19 40 65 / bureau 602N


#2

Hier j’ai tenté tout simplement de faire tourner Mongrel, tout seul, sur
une application toute con. Le serveuer à commencé à swapper rapidement,
c’était quasi inutilisable… 3 ou 4 secondes pour accéder à chaque page
!!!

Bon, en fait j’avais pas que ça… J’avais mis apache, et en plus il y
avait
postfix ainsi que bind. j’ai tout viré (-:

Le meme test est déjà franchement plus satisfaisant, vu j’ai l’occupation
memoire suivante :

free -m
total used free shared buffers
cached
Mem: 217 56 160 0 3
15
-/+ buffers/cache: 37 179
Swap: 509 0 509

gUI


Guillaume B. : (05 61) 19 40 65 / bureau 602N


#3

Bonjour Guillaume

je te propose de jeter un oeil à LiteSpeed (gratuit en version
standard), Ã
utiliser avec LSAPI, sans mongrel (tu peux aussi l’utiliser avec
mongrel).
L’utilisation mémoire est plus légère qu’Apache (note toutefois que j’ai
toujours plein de RAM sur mes serveurs, donc je n’ai pas testé moi même
l’aspect ‘small memory footprint’!). Robuste et facile d’emploi.

http://www.mathewabonyi.com/articles/2006/10/28/litespeed-lsapi/

http://litespeedtech.com/

a+

Thibaut Barrère

LoGeek
[mail] removed_email_address@domain.invalid
[blog] http://www.dotnetguru2.org/tbarrere

Le 09/03/07, Guillaume B.
removed_email_address@domain.invalid
a écrit :


#4

Guillaume B. wrote the following on 09.03.2007 08:40 :

rapidement, c’était quasi inutilisable… 3 ou 4 secondes pour accéder
à chaque page !!!

Mon appli n’est pas grosse, je compte pas avoir 1000 requetes par
seconde, donc je pensais qu’un petit serveur dans le style suffirait.
C’est apparemment faux.

Avant d’abandonner définitivement la solution kimsufi, y a-t-il un
moyen de servir du Rails qui utiliserait moins de RAM ?
Au passage, j’utilise sqlite3, pensant que ça prend moins de
ressources que mySQL par exemple.

PostgreSQL est beaucoup moins gourmand en RAM que MySQL. SQLite3 est Ã
éviter en dehors des dev (lorsque tu fais une écriture, aucune autre
écriture ni même lecture n’est possible).

Astuces supplémentaires :

  • utiliser un serveur web léger (lighttpd ou nginx par exemple) au lieu
    d’Apache.
  • utiliser djbdns au lieu de bind (il faut prendre le temps de rentrer
    dans le bain, mais la différence en terme de RAM est très importante).
  • faire la chasse à tous les processus qui tournent sur la machine (y
    compris temporairement par cron, car ils peuvent faire passer ton appli
    en swap pour pouvoir tourner, si tu peux te passer de locate, désactiver
    updatedb peut aider par exemple).

Lionel


#5

Salut Guillaume,

J’ai fait mes premiers test Apache+rails+mongrel sur un kimsuffi avec os
debian. Le tout s’est plutôt bien comporté avec une petite appli test.
Depuis je suis passé à un serveur plus performant pour la mise en prod.
J’utilise nginx+mongrel et j’en suis pleinement satisfait. De plus nginx
est d’une facilité de mise en service incroyable.

A+

Jérémy.

Le vendredi 09 mars 2007 à 10:18 +0100, Lionel B. a écrit :


#6

je vais me tenter nginx

depuis qques jours je suis donc avec :

  • nginx
  • 2 process mongrel
  • mysql

je reste à la limite du swap avec la consommation mémoire suivante :

free -m

          total       used       free     shared    buffers 

cached
Mem: 217 210 6 0 8
13
-/+ buffers/cache: 188 28
Swap: 509 1 508

je précise que l’activité du site est proche de l’ancéphalogramme plat,
puisque
c’est en phase de dev, meme si il tourne dans un environnement
“production”.

voilà , c’est pour témoigner que dans le cadre d’une appli ayant un
trafic très
faible, les 256Mo de RAM d’un kimsufi sont suffisants.

ensuite, lors d’une augmentation du trafic, je me demande en fait en
quoi la
conso de RAM va augmenter. par exemple, mysql augmente-t-il son nombre
de
proccessus ?

gUI


#7

Le 13/03/07, Guillaume B. a écrit :

voilà , c’est pour témoigner que dans le cadre d’une appli ayant un trafic
très
faible, les 256Mo de RAM d’un kimsufi sont suffisants.

Perso je préfère les 1Go de RAM d’une dedibox :slight_smile:


#8

J’utilise nginx+mongrel et j’en suis pleinement satisfait. De plus nginx
est d’une facilité de mise en service incroyable.

je vais me tenter nginx (litespeed est une bonne idée… mais pas libre
(-: )

gUI


#9

Perso je préfère les 1Go de RAM d’une dedibox :slight_smile:

C’est pas 512 la dédibox ???

gUI


Guillaume B. : (05 61) 19 40 65 / bureau 602N


#10

Guillaume B. wrote the following on 13.03.2007 10:54 :

free -m

         total       used       free     shared    buffers     cached

Mem: 217 210 6 0 8 13
-/+ buffers/cache: 188 28
Swap: 509 1 508

Est-ce possible d’avoir un listing des processus (ps aux)? Je
m’attendais à ce que dans ta configuration (nginx: 1-2M, mongrel:
30M-40M * 2, mysql: ?) ça rentre dans 128M et je vois que tu as 188M
d’utilisé.

Sur un VPS avec lighttpd, postfix, djbdns, PostgreSQL, OpenVPN, SQLgrey,
nagios, tpop3d et les processus courants (sshd, crond, syslog-ng, udevd,
…) j’ai 30 + 24M d’utilisé (RAM + SWAP, sachant que j’ai 128M de RAM
disponible ce qui me laisse ~ 90M de RAM libre)…
Je tape dans le swap, mais uniquement parce que certains processus
n’utilisent pas vraiment la RAM allouée (je n’ai quasiment aucun accès
au swap alors que tous les processus listés sont utilisés en permanence)
et que donc Linux préfère récupérer la RAM pour du cache.

Lionel.


#11

Frédéric Logier wrote the following on 13.03.2007 11:11 :

Le 13/03/07, Guillaume B. a écrit :

voilà , c'est pour témoigner que dans le cadre d'une appli ayant un
trafic très
faible, les 256Mo de RAM d'un kimsufi sont suffisants.

Perso je préfère les 1Go de RAM d’une dedibox :slight_smile:

Si tu as besoin de RAM oui. Si tu as besoin de CPU pour faire tourner
erb et que tu peux te contenter de 256M, la kimsufi est préférable (et
moins chère). Enfin, un VPS 256M chez Linode coûte encore moins cher que
la kimsufi, mais il faut s’attendre à avoir moins de CPU de temps en
temps.

Lionel.


#12

Est-ce possible d’avoir un listing des processus (ps aux)?

il y a bcp de process mysql…

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 1444 504 ? S Mar12 0:06 init
[3]
root 2 0.0 0.0 0 0 ? S Mar12 0:00
[keventd]
root 3 0.0 0.0 0 0 ? SN Mar12 0:00
[ksoftirqd_CPU]
root 4 0.0 0.0 0 0 ? S Mar12 0:00
[kswapd]
root 5 0.0 0.0 0 0 ? S Mar12 0:00
[bdflush]
root 6 0.0 0.0 0 0 ? S Mar12 0:00
[kupdated]
root 7 0.0 0.0 0 0 ? S< Mar12 0:00
[mdrecoveryd]
root 8 0.0 0.0 0 0 ? S Mar12 0:00
[kjournald]
root 28831 0.0 0.0 0 0 ? S Mar12 0:00
[kjournald]
root 28212 0.0 0.3 2096 812 ? Ss Mar12 0:00
/usr/sbin/syslo
mysql 3237 0.0 13.0 94036 28944 ? Ss Mar12 0:00
/usr/sbin/mysql
mysql 20526 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 32135 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 10427 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 929 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 5404 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 12999 0.0 13.0 94036 28944 ? S Mar12 0:12
/usr/sbin/mysql
mysql 27230 0.0 13.0 94036 28944 ? S Mar12 0:08
/usr/sbin/mysql
mysql 108 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 87 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
mysql 27879 0.0 13.0 94036 28944 ? S Mar12 0:00
/usr/sbin/mysql
root 19476 0.0 0.3 5840 888 ? Ss Mar12 0:00 nginx:
master p
nginx 21495 0.0 1.3 6000 3100 ? S Mar12 0:00 nginx:
worker p
root 361 0.0 0.4 3832 928 ? Ss Mar12 0:01
/usr/sbin/sshd
root 27104 0.0 0.3 1968 676 ? Ss Mar12 0:00
/usr/sbin/cron
root 29605 0.0 14.4 36100 32144 ? S Mar12 0:06
/usr/bin/ruby18
root 11378 0.0 14.4 36040 32020 ? S Mar12 0:06
/usr/bin/ruby18
root 17547 0.0 0.2 1432 448 tty1 Ss+ Mar12 0:00
/sbin/agetty 38
root 9336 0.0 0.2 1432 448 tty2 Ss+ Mar12 0:00
/sbin/agetty 38
root 20245 0.0 0.2 1432 448 tty3 Ss+ Mar12 0:00
/sbin/agetty 38
root 20953 0.0 0.2 1432 448 tty4 Ss+ Mar12 0:00
/sbin/agetty 38
root 31338 0.0 0.2 1432 448 tty5 Ss+ Mar12 0:00
/sbin/agetty 38
root 26134 0.0 0.2 1432 448 tty6 Ss+ Mar12 0:00
/sbin/agetty 38
mysql 2334 0.0 13.0 94036 28944 ? S 07:25 0:00
/usr/sbin/mysql
mysql 6502 0.0 13.0 94036 28944 ? S 07:25 0:00
/usr/sbin/mysql
root 28377 0.0 0.9 6676 2180 ? Ss 09:57 0:00 sshd:
root@ttyp
root 25733 0.0 0.7 3008 1676 ttyp0 Ss 09:57 0:00 -bash
root 24346 0.0 0.4 2292 904 ttyp0 R+ 11:23 0:00 ps aux


#13

1Go de RAM, processeur 2Ghz VIA.

J’étais persuadé que c’était 512 ! C’est récent le passage à 1Go ???

gUI


Guillaume B. : (05 61) 19 40 65 / bureau 602N


#14

Le 13/03/07, Lionel B. a écrit :

Si tu as besoin de RAM oui. Si tu as besoin de CPU pour faire tourner
erb et que tu peux te contenter de 256M, la kimsufi est préférable (et
moins chère).

La différence de 10€ n’est à mon avis pas suffisante, l’écart entre la
taille mémoire est trop énorme. 256 Mo de RAM c’est vraiment trop
faible.


#15

Le 13/03/07, Guillaume B. a écrit :

Perso je préfère les 1Go de RAM d’une dedibox :slight_smile:

C’est pas 512 la dédibox ???

1Go de RAM, processeur 2Ghz VIA.
http://www.dedibox.fr/


#16

Le 13/03/07, Guillaume B. a écrit :

1Go de RAM, processeur 2Ghz VIA.

J’étais persuadé que c’était 512 ! C’est récent le passage à 1Go ???

Ca a toujours été 1Go de RAM.


#17

Ca a toujours été 1Go de RAM.

Faut que j’achète des yeux moi (((-:

gUI


Guillaume B. : (05 61) 19 40 65 / bureau 602N


#18

Mais il est clairement beaucoup plus lourd que PostgreSQL…

je peux toujours tenter avec PostgresSQL. Vu que c’est rails qui
s’occupe de
tout, je me fiche un peu du SGBD qu’il y a derrière !!!

gUI


#19

Guillaume B. wrote the following on 13.03.2007 11:23 :

Est-ce possible d’avoir un listing des processus (ps aux)?

il y a bcp de process mysql…

Si je ne me trompe pas ce sont des threads, donc en fait ça ne prend pas
tant que ça. Mais il est clairement beaucoup plus lourd que
PostgreSQL…
Au fait, si ton occupation RAM était relevée juste après le boot, tu
peux t’attendre à ce qu’une partie aille en SWAP à l’usage, mais je ne
sais pas dans quelles proportions : ça dépend vraiment de trop de
paramètres.

Lionel


#20

Bonjour,

A titre de comparaison, voici ma config sur dédié :

  • processeur : Intel Pentium 4 HyperThreading 3.00 GHz
  • RAM : 1Go
  • ruby 1.8.5
  • rails 1.2.2
  • nginx 0.5.12
  • mongrel server 1.0.1
  • mysql 5.0.32

free -m donne :

         total       used       free     shared    buffers

cached
Mem: 999 673 326 0 99
410
-/+ buffers/cache: 163 836
Swap: 509 0 509

ps aux donne :

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1492 504 ? S Feb18 0:12 init
[2]
root 2 0.0 0.0 0 0 ? S Feb18 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SN Feb18 0:00
[ksoftirqd_CPU0]
root 4 0.0 0.0 0 0 ? SN Feb18 0:01
[ksoftirqd_CPU1]
root 5 0.0 0.0 0 0 ? S Feb18 0:00 [kswapd]
root 6 0.0 0.0 0 0 ? S Feb18 0:00 [bdflush]
root 7 0.0 0.0 0 0 ? S Feb18 0:10
[kupdated]
root 8 0.0 0.0 0 0 ? S Feb18 0:00
[scsi_eh_0]
root 9 0.0 0.0 0 0 ? S Feb18 0:00
[scsi_eh_1]
root 10 0.0 0.0 0 0 ? S< Feb18 0:00
[mdrecoveryd]
root 11 0.0 0.0 0 0 ? S Feb18 0:36
[kjournald]
root 18231 0.0 0.0 0 0 ? S Feb18 0:00
[kjournald]
root 20105 0.0 0.0 2248 792 ? Ss Feb18
0:14 /sbin/syslogd
root 31080 0.0 0.0 1492 464 ? Ss Feb18
0:00 /sbin/klogd
root 5801 0.0 0.1 3128 2012 ? Ss Feb18
0:00 /usr/sbin/named
Debian- 1825 0.0 0.1 5124 1648 ? Ss Feb18
0:00 /usr/sbin/exim4 -bd -q30m
root 4686 0.0 0.0 1480 428 ? Ss Feb18
0:00 /usr/sbin/inetd
root 10423 0.0 0.0 1752 724 ? Ss Feb18
0:04 /usr/sbin/cron
root 32279 0.0 0.0 1488 476 tty1 Ss+ Feb18
0:00 /sbin/getty 38400 tty1
root 10646 0.0 0.0 1488 476 tty2 Ss+ Feb18
0:00 /sbin/getty 38400 tty2
root 24723 0.0 0.0 1488 476 tty3 Ss+ Feb18
0:00 /sbin/getty 38400 tty3
root 2502 0.0 0.0 1484 472 tty4 Ss+ Feb18
0:00 /sbin/getty 38400 tty4
root 11784 0.0 0.0 1488 476 tty5 Ss+ Feb18
0:00 /sbin/getty 38400 tty5
root 26443 0.0 0.0 1488 476 tty6 Ss+ Feb18
0:00 /sbin/getty 38400 tty6
root 18839 0.0 0.0 1488 480 ttyS0 Ss+ Feb18
0:00 /sbin/getty -L ttyS0 9600 vt100
root 10817 0.0 0.1 3724 1564 ? Ss Mar02
0:00 /usr/sbin/sshd
root 15993 0.0 0.1 2312 1116 ? S Mar07
0:00 /bin/sh /usr/bin/mysqld_safe
mysql 322 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
root 26402 0.0 0.0 1484 492 ? S Mar07 0:00 logger -p
daemon.err -t mysqld_safe -i -t mysqld
mysql 11413 0.0 1.8 78468 18976 ? S Mar07
0:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 29924 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 14487 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 8625 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 30215 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 7194 0.0 1.8 78468 18976 ? S Mar07
0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 14417 0.0 1.8 78468 18976 ? S Mar07
0:38 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 10668 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 10100 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 17451 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
mysql 19480 0.0 1.8 78468 18976 ? S Mar07
0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
root 18454 0.0 0.1 3692 1744 ? Ss Mar07 0:00 nginx:
master process /usr/local/sbin/nginx
jeremy 30108 0.0 0.2 3992 2140 ? S Mar07 0:07 nginx:
worker process
jeremy 16637 0.0 0.2 3992 2108 ? S Mar07 0:03 nginx:
worker process
mysql 12021 0.0 1.8 78468 18976 ? S Mar07
0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql
–user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip
root 25394 0.0 3.0 32536 30860 ? S Mar08
0:19 /usr/local/bin/ruby /usr/local/bin/mongrel_rails start -d -e
production -p 8002 -a 127.0.0.1 -P log/mongrel.8002.p
root 12832 0.0 3.0 32504 30876 ? S Mar08
0:18 /usr/local/bin/ruby /usr/local/bin/mongrel_rails start -d -e
production -p 8003 -a 127.0.0.1 -P log/mongrel.8003.p
root 897 0.0 0.1 7012 2044 ? Ss 11:18 0:00 sshd:
jeremy [priv]
jeremy 27057 0.0 0.2 7160 2112 ? S 11:18 0:00 sshd:
jeremy@pts/0
jeremy 17223 0.0 0.1 2600 1508 pts/0 Ss 11:18 0:00 -bash
root 31089 0.0 0.1 2580 1484 pts/0 S 11:33 0:00 bash
root 29180 0.0 0.0 2488 856 pts/0 R+ 11:49 0:00 ps aux

Voilà .

Jérémy.

Le mardi 13 mars 2007 à 11:23 +0100, Guillaume B. a écrit :