[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: A working memory profiling solution?

From: Robert Klemme <shortcutter@...>
Date: 2013-06-24 21:43:09 UTC
List: ruby-talk #408464
On Mon, Jun 24, 2013 at 8:01 PM, Andras Horvath <lists@ruby-forum.com>wrote:

> Robert Klemme wrote in post #1113449:
> > How exactly do you imagine "memory usage by methods" to be measured?
> > Are you just interested in learning how much memory is allocated
> (temporarily)
> from withing a method or do you have a memory leak?
>
> I'm interested in figuring out the memory peaks of specific code pieces.
> Even if memory gets freed up at some point, I'd still like to know the
> amount that was used just right before to be able to calculate the
> amount that would be used by concurrent processes.
>

For that wouldn't it be sufficient to monitor memory usage of the process
over time?


> And also to see the history of memory usage by methods compared to each
> other so that I know which part of the code I should rewrite to make it
> more memory efficient.
>

Considering a call stack of, say, 10 levels how would you attribute memory
usage to methods?  Would you sum it up along the hierarchy?  How would you
consider different invocations of the same method at different points in
time?  Assuming you could count the bytes allocated during a call of method
x: now, since that figure tells you nothing about the allocation pattern
you do not really gain information with regard to the complete memory
usage.  For example, you could allocate 10,000 objects in a loop one per
iteration and forget them immediately OR you allocate them, stuff them in
an Array and loose them only at method exit.  In the latter case you may
need more memory since GC cannot collect earlier.  Considering that, total
memory of the process may be a better metric.

If you consider memory usage at method exit vs. method entry a method which
allocates lots of objects that it releases shortly after might be actually
much worse for the program in terms of CPU and GC activity than another
method which steadily allocates objects which are returned in a collection
although the latter looks much worse with this statistics.


> > I usually found "ruby -r profile" helpful.  You can also use module
> > Benchmark for measuring timing of specific parts of code.  You can even
> > use
> > Benchmark.measure { ... } around a specific piece and you'll get CPU,
> > system and wall clock time in an instance of class Benchmark::Tms,
>
> I use these tools and they work great. Only they've got nothing to do
> with memory consumption.
>

Didn't you also ask for  "process time output"?

> For memory leak detection I once created a small tool with ObjectSpace
> > which just counts instances per class and outputs deltas.  You might
> > find
> > it in the archives of this forum.
>
> If I understand you correctly, you say I can only see the counted sum of
> these objects? But I reckon I still won't be able to calculate memory
> usage by this.
>

You could create metrics though which might not be bytes but nevertheless
relevant: you count the number of instance variables.  With that you have a
measurement of the relative size of instances of different classes.  For
String you could use e.g. bytesize / 4 (or how many bytes a reference takes
up).  That would still not give you exact bytes but the information about
relative sizes would be enough for optimization - if you actually have a
memory issue.

Advantage of this approach would be that it would not need any
modifications of the runtime - and it would be fun to hack. :-)


> ruby-prof would have similar with its RubyProf::ALLOCATIONS I believe,
> unfortunately I can't get it to work. But anyway, your solution can be
> more than nothing. I'll check it out later on. Though I'm still keen to
> find a solution for what I described above.
>

I think for a real solution you would need something like JProfiler, which
records allocation sites and call stacks so you can identify paths through
code with the worst allocation behavior.  You could create something like
this by exchanging implementation of Class#new and counting as suggested
above.  In combination with #caller you can even get the call stack.  The
only problem here is to subtract the measurement code from the statistic...
:-)

Kind regards

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread