3 ms·
I don't have much experience in ruby profiling, but what you're saying doesn't make sense. > the only way to is shell out and scrape the output of ps All `ps`
by TheDong 9y ago
I don't have much experience in ruby profiling, but what you're saying doesn't make sense.
> the only way to is shell out and scrape the output of ps
All `ps` is doing is reading files in proc. The memory info it prints is in `/proc/$pid/status`. Ruby can trivially read `/proc/self/status` to get that very naive view of how much memory it's using.
That isn't a useful amount of memory because, well, it doesn't actually show where object allocations go.
> Copy on write does definitely help here, only for Ruby > 2.0.
I believe she meant the operating system's copy-on-write of memory. Forking a copy of a process is actually very cheap because it's copy-on-write. That has nothing to do with ruby or its version and has been true in linux for as long as linux has existed.
I really don't understand what you're trying to say or why you mention ps at all.
- wdewind 9y ago> All `ps` is doing is reading files in proc. The memory info it prints is in `/proc/$pid/status`. Ruby can trivially read `/proc/self/status` to get that very naive view of how much memory it's using. Yep, great point, I am simply wrong about this. > I believe she meant the operating system's copy-on-write of memory. Forking a copy of a process is actually very cheap because it's copy-on-write. That has nothing to do with ruby or its version and has been true in linux for as long as linux has existed. Re: Copy on write the way Ruby implements GC in < 2.0 screws this up: > The way ruby creates objects, the GC flag or reserved bit is stored in the object itself. So, as you would have guessed by now, when the GC runs in one of the processes, the GC flag would be modified in all the objects even if they are present in the shared pool. Now, the OS would sense this and trigger a copy-on-write making private copies of the objects in each child’s memory space. https://medium.com/@rcdexta/whats-the-deal-with-ruby-gc-and-copy-on-write-f5eddef21485 https://medium.com/@rcdexta/whats-the-deal-with-ruby-gc-and-...
- zb 9y agoThat is a genuine issue with fork(), but if you do fork() followed immediately by exec() then you won't ever encounter it. (The new process's memory space completely replaces the copied pages of the child.) So it's a real problem for e.g. spinning off worker processes, but not at all for e.g. calling out to a shell.
- byroot 9y agoRuby 2 was released 5 years ago, this point is kind of moot.