Bonjour à tous
Tout d'abord voici la config :
Serveur linux : ubuntu 8.4
Rails : 2.3.4
Ruby : 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
Le but premier était de tester la charge d'un serveur. En réalisant quelque test j'ai l'impression, je dit bien "l'impression" que Ror est monotache. Ce qui n'est pas concevable.
Il a bien un problème quelque part et c'est pour cela que je fais appel à vous.
Fichier de conf coté serveur
config/environments/development.rb
voici le script coté serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 --- config.threadsafe! ---
app/controllers/hello_controller.rb
et script de "test de charge" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class HelloController < ApplicationController def word $startTime = Time.now for valeur in 1..10000000 end $stopTime = (Time.now - $startTime) render :text => "Hello Word!!!!, id: "+params["id"]+", temps: "+$stopTime.to_s end end
helloWord.sh
et script client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #!/bin/bash count=0 while [ $count -lt $1 ] do php helloWord.php $count & count=`expr $count + 1` done
helloWord.php
et voici le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $url = "http://".URL_AMV."/hello/word?id=".$id; $timeStart = microtime(TRUE); echo "debut de ".$id." à ".$timeStart."\n"; $retour = file($url); $timeStop = microtime(TRUE); echo "fin de ".$id." à ".$timeStop."\n"; echo "Total pour ".$id." => ".$totalTime."\n"; echo $url."\n"; print_r($retour);
Coté log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 ./helloWord.sh 5 debut de 0 à 1285767141.33 debut de 1 à 1285767141.332 debut de 2 à 1285767141.37 debut de 3 à 1285767141.3795 debut de 4 à 1285767141.406 fin de 0 à 1285767142.2877 Total pour 0 => 0.958 http://87.98.167.204:4445/hello/word?id=0 Array ( [0] => Hello Word!!!!, id: 0, temps: 0.760337 ) fin de 1 à 1285767143.1712 Total pour 1 => 1.839 http://87.98.167.204:4445/hello/word?id=1 Array ( [0] => Hello Word!!!!, id: 1, temps: 0.760326 ) fin de 2 à 1285767143.9855 Total pour 2 => 2.616 http://87.98.167.204:4445/hello/word?id=2 Array ( [0] => Hello Word!!!!, id: 2, temps: 0.760426 ) fin de 3 à 1285767144.8673 Total pour 3 => 3.488 http://87.98.167.204:4445/hello/word?id=3 Array ( [0] => Hello Word!!!!, id: 3, temps: 0.760231 ) fin de 4 à 1285767145.6874 Total pour 4 => 4.281 http://87.98.167.204:4445/hello/word?id=4 Array ( [0] => Hello Word!!!!, id: 4, temps: 0.764974 )
Que constatons nous ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Processing HelloController#word (for 80.13.147.95 at 2010-09-29 15:31:53) [GET] Parameters: {"id"=>"0"} Completed in 763ms (View: 0, DB: 1) | 200 OK [http://87.98.167.204/hello/word?id=0] SQL (0.2ms) SET client_min_messages TO 'panic' SQL (0.1ms) SET client_min_messages TO 'notice' Processing HelloController#word (for 80.13.147.95 at 2010-09-29 15:31:54) [GET] Parameters: {"id"=>"1"} Completed in 763ms (View: 0, DB: 1) | 200 OK [http://87.98.167.204/hello/word?id=1] SQL (0.2ms) SET client_min_messages TO 'panic' SQL (0.1ms) SET client_min_messages TO 'notice' Processing HelloController#word (for 80.13.147.95 at 2010-09-29 15:31:55) [GET] Parameters: {"id"=>"2"} Completed in 763ms (View: 0, DB: 1) | 200 OK [http://87.98.167.204/hello/word?id=2] SQL (0.2ms) SET client_min_messages TO 'panic' SQL (0.1ms) SET client_min_messages TO 'notice' Processing HelloController#word (for 80.13.147.95 at 2010-09-29 15:31:56) [GET] Parameters: {"id"=>"3"} Completed in 763ms (View: 0, DB: 1) | 200 OK [http://87.98.167.204/hello/word?id=3] SQL (0.2ms) SET client_min_messages TO 'panic' SQL (0.1ms) SET client_min_messages TO 'notice' Processing HelloController#word (for 80.13.147.95 at 2010-09-29 15:31:57) [GET] Parameters: {"id"=>"4"} Completed in 767ms (View: 0, DB: 1) | 200 OK [http://87.98.167.204/hello/word?id=4]
- Nous remarquons que 5 processus sont bien lancés en même temps.
- Que ruby met quasi toujours le même temps pour traiter la demande (760ms).
- ET : Que Ror attend la fin d'un traitement avant de traiter le suivant. Dans cette hypothèse, si j'utilise l'architecture Ror pour faire un site web, et 5 internautes se connectent à ce site, il vont devoir que attendre chacun leur tour pour que leur page s'affiche...
Sur ce :
Je suis sûr qu'il y a un problème dans mon raisonnement ou dans la configuration de mon serveur. Est il possible que quelqu'un vienne m'aider à ce sujet?
Merci
Partager