Hi,
first of all, sorry for my english.
to start, here my config :
Server linux : ubuntu 8.4
Rails : 2.3.4
Ruby : 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
I wanted to test the charge capacity of my server, and I saw a problem
with the multithrearding on  Ror.
Here the config file on the server
config/environments/development.rb
Code :
---
config.threadsafe!
---
Here the ruby file on the server
app/controllers/hello_controller.rb
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
And the script of "loading test" :
helloWord.sh
#!/bin/bash
count=0
while [ $count -lt $1 ]
do
        php helloWord.php $count &
        count=`expr $count + 1`
done
And the client script
$url = "http://".URL_AMV."/hello/word?id=".$id;
$timeStart = microtime(TRUE);
echo "end of ".$id." to ".$timeStart."\n";
$retour = file($url);
$timeStop = microtime(TRUE);
echo "end of ".$id." to ".$timeStop."\n";
echo "Total for ".$id." => ".$totalTime."\n";
echo $url."\n";
print_r($retour);
The result is :
./helloWord.sh 5
start of 0 to 1285767141.33
start of 1 to 1285767141.332
start of 2 to 1285767141.37
start of 3 to  1285767141.3795
start of 4 to 1285767141.406
end of 0 to 1285767142.2877
Total for 0 => 0.958
http://87.98.167.204:4445/hello/word?id=0
Array
(
    [0] => Hello Word!!!!, id: 0, temps: 0.760337
)
end of 1 to 1285767143.1712
Total for 1 => 1.839
http://87.98.167.204:4445/hello/word?id=1
Array
(
    [0] => Hello Word!!!!, id: 1, temps: 0.760326
)
end of 2 to 1285767143.9855
Total for 2 => 2.616
http://87.98.167.204:4445/hello/word?id=2
Array
(
    [0] => Hello Word!!!!, id: 2, temps: 0.760426
)
end of 3 to 1285767144.8673
Total for 3 => 3.488
http://87.98.167.204:4445/hello/word?id=3
Array
(
    [0] => Hello Word!!!!, id: 3, temps: 0.760231
)
end of 4 to 1285767145.6874
Total for 4 => 4.281
http://87.98.167.204:4445/hello/word?id=4
Array
(
    [0] => Hello Word!!!!, id: 4, temps: 0.764974
)
and the log is :
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]
what are we seeing?
- 5 process run together
- Ruby take the same time for each process (760 ms)
- BUT : RoR wait the end of each process before answer to client.
finally :
I think, there is a probleme somewhere. but WHERE?? could you help me
please?
regards,
Yann (geek)
-- 
Posted via http://www.ruby-forum.com/.
-- 
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sep 30, 9:06 am, Yann Geek <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> > what are we seeing? > - 5 process run together > - Ruby take the same time for each process (760 ms) > - BUT : RoR wait the end of each process before answer to client. > > finally : > I think, there is a probleme somewhere. but WHERE?? could you help me > please?Rails runs single-threadedly by default. config.threadsafe! (in one of your environment configuration file) will enable more than one request to be processed at a time although limitations of MRI''s threadeding mean you might not see the difference you expect (and i think earlier versions of mongrel only even dispatch one request to rails at a time, because rails used to be non threadsafe) Fred> > regards, > Yann (geek) > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Frederick Cheung wrote:> On Sep 30, 9:06�am, Yann Geek <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: > >> >> what are we seeing? >> - 5 process run together >> - Ruby take the same time for each process (760 ms) >> - BUT : RoR wait the end of each process before answer to client. >> >> finally : >> I think, there is a probleme somewhere. but WHERE?? could you help me >> please? > > Rails runs single-threadedly by default. config.threadsafe! (in one of > your environment configuration file) will enable more than one request > to be processed at a time although limitations of MRI''s threadeding > mean you might not see the difference you expect (and i think earlier > versions of mongrel only even dispatch one request to rails at a time, > because rails used to be non threadsafe) > > Fredthank you. I comment this line : config.cache_classes = false In the config, And I see it work better. But, could you answer to this question : When only one process run, the client wait 0.907 sec. When 2 process run together, each client wait 1.705 sec. When 5 process run together, each client wait 4.073 sec. Whereas ruby take 0.760 sec each time, for all process in all configuration. Why? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Sep 30, 9:44 am, Yann Geek <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I comment this line : > config.cache_classes = false > > In the config, And I see it work better. >You definitely want that - class reloading is non threadsafe.> But, could you answer to this question : > > When only one process run, the client wait 0.907 sec. > When 2 process run together, each client wait 1.705 sec. > When 5 process run together, each client wait 4.073 sec. >I checked mongrel''s source code - it''s still got that mutex inside the rails dispatcher ( a relic really from when that was still needed) so it will never dispatch more than one request to rails at a time. Fred> Whereas ruby take 0.760 sec each time, for all process in all > configuration. > > Why? > > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Frederick Cheung wrote:> On Sep 30, 9:44�am, Yann Geek <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: > >> I comment this line : >> config.cache_classes = false >> >> In the config, And I see it work better. >> > You definitely want that - class reloading is non threadsafe. > >> But, could you answer to this question : >> >> When only one process run, the client wait �0.907 sec. >> When 2 process run together, each client wait 1.705 sec. >> When 5 process run together, each client wait 4.073 sec. >> > > I checked mongrel''s source code - it''s still got that mutex inside the > rails dispatcher ( a relic really from when that was still needed) so > it will never dispatch more than one request to rails at a time. > > FredI was told, start server with this commande : server/script : is BAD!! to perform my serveur, its better to use : unicorn/passenger/thin or mongrel. I let''s go to try this... What to you think about it? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.